2012-07-13 22 views
10

Al solicitar credenciales de OAuth, puedo especificar que access_type esté fuera de línea o en línea.¿Cuándo es access_type = Online apropiado? : OAuth2 - API de Google

Optar por el tipo de acceso en línea obliga a los usuarios a aprobar el acceso a mi aplicación cada vez que inician sesión. ¿Porqué es eso? ¿El usuario ya no aprobó mi aplicación?

Actualización # 1:

tengo mi approval_prompt en 'auto'.
Si acabo de cerrar la sesión de Google sin eliminar ninguna cookie, no me vuelve a preguntar. Pero al eliminar las cookies vuelve la pantalla de concesión.

Actualización # 2:

Funciona bien a través de la Zona de juegos OAuth. http://code.google.com/oauthplayground/

Uso de OAuth 2.0 para aplicaciones Web Server https://developers.google.com/accounts/docs/OAuth2WebServer

Actualización # 3: correspondiente código de fragmentos método

ayudante para generar URL de OAuth

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

Al llamar al método ayudante de la Vista

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

generada OAuth URL de la página 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

Yo también frente al problema exacto. Encuentre la URL de mi solicitud a continuación: '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 = code & client_id = 123.apps.googleusercontent.com & approval_prompt = auto & access_type = online' –

+1

@jayyov El comportamiento sigue siendo errático para mí. Parece haber una diferencia entre hacer esto en el sitio web localhost vs alojado también. –

+0

¿Hubo alguna vez una solución para esto? Estoy viendo el mismo problema. También noté que no importa cuántas veces apruebo la aplicación no aparece en mi página Administrar aplicaciones. – mwielbut

Respuesta

13

Hay otro parámetro que entra en juego en estos flujos y sospecho que se está ejecutando en él. Es el parámetro approval_prompt.

Cuando access_type=online también está permitido especificar un valor para approval_prompt. Si está configurado en approval_prompt=force, siempre se le preguntará a su usuario, incluso si ya lo han otorgado.

Por otro lado, cuando access_type=offline, approval_prompt sólo puede ajustarse a approval_prompt=force, pero para compensar esta restricción que está también proporcionó una refresh_token que se puede utilizar para refrescar su token de acceso.

Compruebe la URL que su access_type=online está abriendo. Intente configurar approval_prompt=auto. La pantalla de concesión solo debería aparecer la primera vez.

+0

Gracias Jenny. Debería haber mencionado que configuré el approval_prompt en automático. Todavía obtengo la pantalla de concesión. ¿Depende de las cookies?Borro mis cookies para volver a probar el inicio de sesión. Supuse que los servidores OAuth almacenan la aprobación del usuario. Si acabo de cerrar la sesión de Google sin borrar todas las cookies, no se muestra la pantalla de concesión. –

+0

Podría. Si borra todas sus cookies, se cerrará la sesión de Google y se verá obligado a iniciar sesión de nuevo para autenticarse. ¿Tiene a mano un ejemplo de su código de comportamiento incorrecto? Me encantaría echar un vistazo :) – mimming

+0

Thx Jenny! Agregué algunos fragmentos de código relevantes a la Pregunta. ¿Necesitas más? Con respecto a las cookies, si se eliminan las cookies, ¿se le solicitará al usuario que otorgue acceso de nuevo? Puedo entender si necesitan autenticarse de nuevo. –

Cuestiones relacionadas