Подтвердить что ты не робот

Принуждение пользователя к выбору учетной записи через Google OAuth2

В моем приложении есть следующий рабочий процесс:

  • пользователь регистрируется в моем пользовательском приложении
  • Пользователь нажимает кнопку, чтобы связать свою учетную запись YouTube.
  • приложение делает запрос на стороне сервера, используя приведенный ниже код
  • пользователь перенаправляется на URL-адрес google auth url

В этот момент происходит одна из двух вещей:

[I никогда не хочет этого поведения]  - Если пользователь зарегистрирован в одной учетной записи Google (то есть gmail, Google Apps для доменов и т.д.), Пользователю никогда не предлагается выбрать, какую учетную запись нужно связать. Он просто предполагает, что они хотят использовать тот, с которым они вошли, и продолжают веселиться.

[I всегда хочет этого поведения]  - Если пользователь либо не вошел в учетные записи Google, либо они вошли в более чем одну учетную запись Google, тогда им предлагается выбрать, с какой учетной записи они будут работать.

Вопрос: Есть ли способ заставить пользователя выбрать учетную запись, даже если пользователь в настоящее время зарегистрирован в одной учетной записи Google?

код:

private def getFlow() = {
  if (flow == null) {
    logger.info("Using OAuth client secrets file: " + GoogleOAuthService.CLIENT_SECRETS_JSON)
    clientSecrets = GoogleClientSecrets.load(JacksonFactory.getDefaultInstance(),
      new InputStreamReader(getClass.getResourceAsStream(GoogleOAuthService.CLIENT_SECRETS_JSON)));
    redirectUri = clientSecrets.getDetails().getRedirectUris().get(0)
    flow = new GoogleAuthorizationCodeFlow.Builder(
      httpTransport, JacksonFactory.getDefaultInstance(), clientSecrets, SCOPES).setDataStoreFactory(
      dataStoreFactory).setAccessType("offline").setApprovalPrompt("force").build()
  }
  flow
}

def newAuthorizationUrl(userId: String) = {
  val urlRequest = getFlow().newAuthorizationUrl()

  urlRequest.setAccessType("offline")
   .setRedirectUri(redirectUri).setState(userId).build()
}
4b9b3361

Ответ 1

Я думаю, вы можете добавить какой-то параметр в URL-адрес, чтобы сказать google, чтобы показать экран согласия с учетными записями пользователей, а не принимать учетную запись google по умолчанию.

Это можно сделать, добавив приглашение = select_account + согласие ( "+" добавляется как часть кодировки url) в URL.

Я не пробовал это до сих пор, но, возможно, вы можете попробовать.

Ответ 2

В первом комментарии @Hans дал правильную ссылку на аналогичную тему. Однако, если это не помогает, то вот решение:

просто добавьте параметр &prompt=consent при запросе URL-адреса google.