2016-06-08 22 views
12

Ho il seguente flusso di lavoro nella mia domanda:Forzare un utente di scegliere un account tramite Google OAuth2

  1. utente accede mia app personalizzato
  2. utente fa clic su un pulsante per collegare il proprio account YouTube
  3. applicazione effettua una richiesta lato server utilizzando il listato di codice sotto
  4. utente viene reindirizzato al auth url google

A questo punto, una delle due cose accade:

[I mai desidera che questo comportamento] - Se l'utente è connesso in esattamente un account Google (vale a dire gmail, Google Apps per domini, ecc.) all'utente non viene mai chiesto di scegliere quale account collegare. Presuppone solo che vogliono usare quello in cui sono loggati e vanno avanti alla sua maniera allegra.

[I sempre desidera che questo comportamento] - non se l'utente è o registrato per qualsiasi account Google, o sono connessi a più di un account Google, allora gli viene chiesto di scegliere quale essi rappresentano Mi piacerebbe procedere con.

Domanda: C'è un modo per costringere l'utente a scegliere un account, anche se l'utente è attualmente connesso a un singolo account Google?

Codice:

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() 
} 
+0

Non credo sia possibile accedere contemporaneamente a più di un account Google. –

+3

http://stackoverflow.com/questions/14384354/force-google-account-chooser –

risposta

1

Penso che si possa aggiungere qualche parametro nell'URL per comunicare a Google per visualizzare la schermata consenso con gli account utente invece di assumere l'account predefinito di Google.

Questo può essere fatto aggiungendo prompt = select_account + consenso ("+" è aggiunto come parte della codifica url) nell'URL.

Non ci ho provato fino ad ora ma forse puoi provare.

1

Nel primo commento, @Hans ha fornito il collegamento corretto all'argomento simile. Tuttavia, se non aiuta, allora ecco la soluzione:

basta aggiungere &prompt=consent parametro nel richiedere l'URL di google.

Problemi correlati