2012-07-13 17 views
10

Quando si richiedono le credenziali OAuth, è possibile specificare access_type in modalità offline o online.Quando access_type = online è appropriato? : OAuth2 - API Google

L'opzione per il tipo di accesso Online obbliga gli utenti ad approvare l'accesso alla mia app ogni volta che effettuano l'accesso. Perché? L'utente non ha già approvato la mia app?

Update # 1:

ho il mio approval_prompt impostata su 'auto'.
Se mi disconnetto da Google senza eliminare alcun cookie, non mi viene nuovamente richiesto. Ma l'eliminazione dei cookie riporta la schermata di concessione.

Aggiornamento # 2:

Funziona bene attraverso l'OAuth Playground. http://code.google.com/oauthplayground/

Utilizzando OAuth 2.0 per le applicazioni server Web https://developers.google.com/accounts/docs/OAuth2WebServer

Aggiornamento # 3: codice rilevante frammenti metodo

Helper per generare OAuth URL

def build_auth_uri 
    return @client.authorization.authorization_uri(
    :access_type => :online, 
    :approval_prompt => :auto 
    ).to_s 
end 

chiamata al metodo Helper in the View

<a href="<%= build_auth_uri %>"> Connect Me! </a> 

generata OAuth URL sulla pagina web

https://accounts.google.com/o/oauth2/auth?access_type=online&approval_prompt=auto&redirect_uri=http://localhost:3000/gclient/gcallback&response_type=code 
+0

Anche io di fronte al problema esatto. Trova l'URL della mia richiesta qui sotto: 'https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com /auth/userinfo.profile&state=profile&redirect_uri=http: // localhost/oacallback & response_type = codice & client_id = 123.apps.googleusercontent.com & approval_prompt = auto & access_type = online' –

+1

@jayyov Il comportamento è ancora irregolare per me. Sembra che ci sia una differenza tra fare questo su localhost vs sito web ospitato troppo. –

+0

C'è mai stata una soluzione a questo? Sto vedendo lo stesso problema. Ho anche notato che non importa quante volte approvo che l'app non viene visualizzata nella mia pagina Gestisci app. – mwielbut

risposta

13

V'è un altro parametro che entra in gioco in questi flussi e ho il sospetto si sta eseguendo in esso. È il parametro approval_prompt.

Quando è access_type=online, è inoltre possibile specificare un valore per approval_prompt. Se è impostato su approval_prompt=force, verrà sempre richiesto all'utente, anche se hanno già concesso.

D'altra parte, quando access_type=offline, approval_prompt può essere impostato solo per approval_prompt=force, ma per compensare questa limitazione si sta anche fornito un refresh_token che può essere utilizzato per aggiornare il tuo token di accesso.

Controlla l'URL che il tuo access_type=online sta aprendo. Prova a impostare approval_prompt=auto. La schermata di concessione dovrebbe apparire solo la prima volta.

+0

Grazie Jenny. Avrei dovuto dire che ho impostato l'approvazione_prompt su auto. Ricevo ancora la schermata di concessione. Dipende dai cookie?Cancella i miei cookie per ripetere il login. Supponevo che i server OAuth memorizzassero l'approvazione dell'utente. Se eseguo il logout di Google senza cancellare tutti i cookie, non viene visualizzata la schermata di concessione. –

+0

Potrebbe. Se stai cancellando tutti i tuoi cookie, sarai disconnesso da Google e sarai costretto ad accedere di nuovo per l'autenticazione. Hai un esempio del tuo codice di comportamento anomalo a portata di mano? Mi piacerebbe dare un'occhiata :) – mimming

+0

Thx Jenny! Ho aggiunto alcuni frammenti di codice rilevanti alla domanda. Hai bisogno di più? Per quanto riguarda i cookie, se i cookie vengono cancellati, all'utente sarà richiesto di concedere nuovamente l'accesso? Posso capire se hanno bisogno di autenticarsi di nuovo. –

Problemi correlati