Выбирать учетную запись 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();