2011-05-02 756 views
5

puedo usar idear con OmniAuth (oauth NO openid) y una configuración devise.rb así:Google oauth a través de legado y OmniAuth/oauth solicitando continuamente acceso

config.omniauth :google, KEY, SECRET 

y lo hace correctamente la redirección a Google para pida permiso (y lo devuelve) ...

pero, por desgracia, siempre lo hace. Debería (creo) saber que acabo de autorizar los permisos para usar google y debería omitir esa redirección a Google después de la primera vez. ¿Alguna sugerencia sobre cómo hacer que esto funcione?

La autorización de la que estoy hablando es: "El sitio blah.com está solicitando acceso a su cuenta de Google para el producto (s) enumerados a continuación". No quiero que esta página siempre vuelva a aparecer.

Respuesta

1

Debe implementar devoluciones de llamadas usted mismo, ni Devise ni Omniauth lo proporcionan de manera predeterminada. Se encargará de enviar al usuario a su punto final OAuth y se asegurará de que regrese, pero no consumirá la información que se envió y/o registrará al usuario.

Depende de usted hacer estas cosas.

Diseñar tiene una página wiki en la creación de un simple controlador de devolución de llamada: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

Ryan Bates tiene una Railscast en hacer un controlador de devolución de llamada más genérico: http://railscasts.com/episodes/236-omniauth-part-2

y he tenido un reportaje para una controlador de devolución de llamada genérica, así: http://blog.impaled.org/code/2011/2/devise-1-2-with-omniauth-on-rails.html

+0

Ya tengo una devolución de llamada. Lamentablemente, cuando se golpea el controlador de devolución de llamada, ya se ha ido a la página de solicitud de acceso de Google. Tengo que asumir que o bien puedo tener una devolución de llamada antes de esta página o de alguna manera monkeypatch idear para ignorar ir a esa página si tengo algún conjunto de cookies. –

+0

La página de autorización de Google no debe volver a aparecer una vez que haya otorgado el permiso. Se redireccionará a Google, por supuesto, pero si ha iniciado sesión y ha otorgado permiso antes, debería redirigir directamente a su controlador de devolución de llamada. Nunca he tenido un problema como este. Si implementa la aplicación en algún lugar, podría echarle un vistazo. –

+0

Es una de esas aplicaciones privadas que no puedo implementar en ningún otro lado. ¿Sabes por casualidad si el código de diseño está inspeccionando una cookie o solo está en google sabiendo que el usuario actualmente conectado ya está "autorizado" en función de la URL de la que proviene? –

1

Actualicé a la última omniauth/idear gemas y usé la gema google_oauth2 (¡lo cual es increíble!).

Debido a esto, pude superar mi problema porque el creador de la gema agregó un parm para evitar la nueva autenticación.

Ver here

0

Con OmniAuth-google-OAuth2 me encontré con lo que tiene que establecer

:approval_prompt => '' 

como una opción en su línea

provider :google_oauth2, ... 

o el valor predeterminado es 'fuerza' en vez , lo que me causó el mismo problema.

deducida este de la lectura de la parte sobre approval_prompt en esta página: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

0

tuve el problema por el que se pediría a los mismos permisos del usuario cada registro en.Lo resuelto mediante la adición de la access_type: "offline" y approval_prompt: "" a mi devise.rb en la carpeta config de la siguiente manera:

config.omniauth :google_oauth2, 'KEYHERE', 'SECRET_HERE', { access_type: "offline", approval_prompt: "", scope: 'userinfo.email,userinfo.profile' } 

El alcance anterior me permite ver información básica sobre el usuario y su correo electrónico.

Espero que esto ayude.

0

Debe habilitar la "API de Contactos" y la "API de Google+" a través de la consola de la API de Google

Cuestiones relacionadas