Принуждение пользователя к выбору учетной записи через 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()
}
Ответы
Ответ 1
Я думаю, вы можете добавить какой-то параметр в URL-адрес, чтобы сказать google, чтобы показать экран согласия с учетными записями пользователей, а не принимать учетную запись google по умолчанию.
Это можно сделать, добавив приглашение = select_account + согласие ( "+" добавляется как часть кодировки url) в URL.
Я не пробовал это до сих пор, но, возможно, вы можете попробовать.
Ответ 2
В первом комментарии @Hans дал правильную ссылку на аналогичную тему. Однако, если это не помогает, то вот решение:
просто добавьте параметр &prompt=consent
при запросе URL-адреса google.