2010-10-17 16 views

Respuesta

0

request.env [ 'omniauth.auth'] deben tener lo que necesita. Para Twitter, devuelve algo así como

{ 
    'uid' => '12356', 
    'provider' => 'twitter', 
    'user_info' => { 
    'name' => 'User Name', 
    'nickname' => 'username', 
    # ... 
    } 
} 

Solo inspecciónelo para openid.

+2

lo que devuelve para twitter y openid es completamente diferente. – cbrulak

2

Puede encontrar this Railscast (towards the end) de Ryan Bates útil para capturar una dirección de correo electrónico al autenticarse a través de OpenID. Para otros campos disponibles, supongo que se puede añadir algo de lo siguiente a su controlador de autenticaciones al hacer la solicitud de autenticación

# authentications_controller.rb 
... 
def create 
    omniauth = request.env["omniauth.auth"] 
    raise omniauth.to_yaml 
    ... 
end 
... 

y luego conectarse a través de OpenID y ver qué opciones tiene.

+1

Eso no funcionará; no hay muchas opciones disponibles por defecto con openid. La pregunta es cómo hacer que estén disponibles, no cómo recuperarlos de request.env. –

+0

Ah, mi mal. Supongo que entendí mal: / – kbjerring

0

request.env ['omniauth.auth'] contendrá la respuesta completa de la devolución de llamada. Pero no todos los proveedores devuelven el correo electrónico del usuario (Twitter no lo hará). OpenID a través de google o yahoo debería tener un correo electrónico como parte del hash 'user_info'.

4

¿Está preguntando cómo solicitar esos datos, o cómo asegurarse de obtenerlos? Puede solicitar datos utilizando los atributos de OpenID AX, pero un proveedor de OpenID no está obligado a responder a lo que usted solicita. Esto debería ser de alguna ayuda, aunque:

Retrieve OpenID AX attributes from Google/Yahoo in Rails

Parece que Google responderá con un correo electrónico sólo para

http://schema.openid.net/contact/email 

mientras que Yahoo responderá a

http://axschema.org/contact/email 
1

Hay algunas instrucciones para esto debajo de la sección de "abrir" de Google en los documentos de integración de omniauth de Devise:

https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

Look para el método de la clase find_for_open_id en el modelo de usuario y la subclase controlador Users::OmniauthCallbacksController de cómo se hace pasar los datos a través de la request.env["omniauth.auth"] hash. Esto se relaciona con cualquier estrategia OpenID, no solo con Google.

En términos de personalizar exactamente qué atributos solicita del proveedor de OpenID, es mejor hacer su propio clon de la gema o subclase omniauth_openid y cambiar el options. (Consulte: https://github.com/intridea/omniauth-openid/blob/master/lib/omniauth/strategies/open_id.rb)

0

Cuando configura omniauth en su bloque de inicialización, puede anular cualquiera de las opciones, incluidos los campos requeridos y opcionales. De acuerdo con los documentos, use Builder para obtener lo que necesita configurar. EG:

config.middleware.use OmniAuth::Builder do 
     provider :open_id, :name => 'my_provider', 
       :identifier => 'https://myprovider.com/openid/xrds', 
       :required => ['http://axschema.org/namePerson/first','http://axschema.org/namePerson/last','http://axschema.org/contact/email','http://axschema.org/my_provider/some_field'] 
    end 
Cuestiones relacionadas