2011-04-24 17 views
9

Estoy usando OAuth a un proveedor (LinkedIn).¿Cómo puedo pasar parámetros a través de una autenticación OAuth para que mi devolución de llamada o controlador pueda usar?

Quiero poder pasar los parámetros para que cuando alguien se registre, pueda agregar algunos valores adicionales en el momento en que se crea el nuevo usuario (estoy usando Devise).

Pero, ¿cómo puedo hacer eso?

Parece que el enlace va al proveedor, que luego hace una devolución de llamada a mi aplicación. ¿Cómo puedo pasar parámetros de ese enlace?

Respuesta

3

La forma más fácil de hacerlo es establecer los parámetros en la sesión y luego acceder a ellos en la devolución de llamada.

en su acción que vuelve a dirigir al proveedor:

session[:additional] = additional_data_hash 

En la acción que se encarga de la devolución de llamada del proveedor:

data = session.delete(:additional) 

Uso delete para asegurar su sesión sigue siendo pequeño para las solicitudes posteriores.

+0

creo que la acción que hace la redirección está en idear .... ¿Cómo manejo que entonces? – Angela

+0

bien, entonces creo que lo agrego como una sesión, déjalo ir a la devolución de llamada y lo uso ... – Angela

+0

Me encantaría que alguien pudiera responder esta pregunta correctamente. La sesión es un truco sobre el problema real abordado. – ghayes

17

Si agrega los parámetros de estilo GET a la url de autenticación, estarán disponibles en la devolución de llamada a través del objeto Rails request.env bajo la clave omniauth.params. Por ejemplo

Si la autenticación a través:

link_to "Log In", "/auth/linkedin?foo=bar" 

En el método de control asignada a GET /auth/:provider/callback tendrá:

request.env['omniauth.params'] == { "foo" => "bar" } 

respuesta era un poco tarde, pero espero que ayude a alguien.

+0

la cosa es que el bar será nuevo cada vez, foo será el mismo, ¿cómo es eso posible? Quiero que la barra sea dinámica – user1735921

-1

Observe que si usa ng-token-auth, puede pasar los parámetros a $auth.authenticate, y estos se usarán al crear el modelo de usuario. Por ejemplo:

$auth.authenticate('github', {params: {favorite_color: 'green'})

Cuestiones relacionadas