Выбирать учетную запись google google
Есть ли способ, по которому я могу заставить google-аккаунт google отображаться, даже если пользователь зарегистрирован только с одной учетной записью.
Я попытался перенаправить на этот URL-адрес:
https://accounts.google.com/AccountChooser?service=lso&continue=[authorizeurl]
и, похоже, он работает, но я не знаю, есть ли другие условия, в которых он может потерпеть неудачу.
![enter image description here]()
Ответы
Ответ 1
В URL-адресах авторизации OAuth2 поддерживается следующий параметр:
prompt
В настоящее время он может иметь значения none
, select_account
и consent
.
-
none: приведет к тому, что Google не будет отображать какой-либо пользовательский интерфейс, и, следовательно, произойдет сбой, если пользователю необходимо войти в систему, или выбрать учетную запись в случае многократного входа в систему, или согласие при первом одобрении. Его можно запустить в невидимом i-кадре, чтобы получить токен от ранее авторизованных пользователей, прежде чем вы решите, например, отобразить кнопку авторизации.
-
Согласие: принудительно отобразит страницу подтверждения, даже если пользователь ранее авторизовал ваше приложение. Может быть полезно в нескольких угловых случаях, например, если вы потеряли для пользователя refresh_token, поскольку Google выдает только refresh_tokens при явном согласии.
-
select_account: вызовет отображение селектора учетной записи, даже если там есть один вошедший в систему пользователь, как вы и просили.
select_account
может быть объединен с consent
, как в:
prompt=select_account consent
Ответ 2
Кроме того, вы можете добавить параметр "prompt" в тегах HTML как data-prompt = "select_account":
<div class="g-signin2" data-onsuccess="onSignIn" data-prompt="select_account">
и он будет принудительно выбирать учетную запись каждый раз, даже если вы вошли в систему только с одной учетной записью
Ответ 3
Некоторые люди могут в конечном итоге найти ответ о том, как это сделать, в Microsoft.AspNetCore.Authentication.
Мы смогли сделать это с помощью следующего кода в методе Startup.ConfigureServices:
services.AddAuthentication()
.AddGoogle(options =>
{
options.ClientId = configHelper.GoogleOAuthClientID;
options.ClientSecret = configHelper.GoogleOAuthSecret;
options.CallbackPath = "/signin-google";
options.AuthorizationEndpoint = string.Concat(options.AuthorizationEndpoint, "?prompt=select_account");
});
Ответ 4
Если вы используете gapi
просто добавьте prompt: 'select_account'
Пример:
gapi.load('auth2', function () {
gapi.auth2.init({
client_id: "client_id.apps.googleusercontent.com",
scope: "profile email", // this isn't required
ux_mode: 'redirect',
redirect_uri: 'https://www.example.com',
prompt: 'select_account'
}).then(function (auth2) {
console.log("signed in: " + auth2.isSignedIn.get());
x = auth2.isSignedIn.get();
auth2.isSignedIn.listen(onSignIn);
var button = document.querySelector('#signInButton');
button.addEventListener('click', function () {
auth2.signIn();
});
});
});
Ответ 5
Для клиента php google api (https://github.com/google/google-api-php-client) вы можете сделать это следующим образом:
$client = new Google_Client();
$client->setApprovalPrompt("force");
$client->createAuthUrl();