Devise + Omniauth: ¿cómo pasar parámetros adicionales a lo largo?

Tengo la capacidad en la aplicación de cargar / users / auth / facebook para conectarme a Facebook. Quiero poder saber de dónde vino la solicitud. Ya sea desde un usuario que se está registrando en Facebook, o desde un usuario existente que simplemente quiere conectarse con Facebook. Según el tipo, las respuestas son muy diferentes.

¿Cómo puedo pasar un parámetro junto a omniauth cuando autentico? Intenté hacer:

/users/auth/facebook?connect_action=signup_connect_to_facebook 

Pero ese parámetro connect_action no lo logró cuando tocó AuthenticationsController # Create

Ideas? Thansk

Tienes que usar las opciones :params , como en

 omniauth_authorize_path(:user, :facebook, var: 'value', var2: 'value2' ) 

y más adelante en la callback puede acceder a request.env['omniauth.params'] para obtener el hash! 🙂

Si la solicitud se realiza desde diferentes páginas en su aplicación, puede examinar request.env [‘omniauth.origin’]. Omniauth guarda esta variable automáticamente.

Aquí hay una explicación más detallada

En cuanto a pasar parámetros personalizados, he tratado de hacer esto sin éxito. La solución alternativa es almacenarlo en la sesión antes de ir al proveedor como se explica aquí .

Espero que esto te ayude.

Para Facebook use el parámetro ‘state’ y pase lo que quiera, pero no olvide la encoding.

 /users/auth/facebook?state=parameter 

Podrías enviar el parámetro como un url de forma codificada json y luego en la callback analizarlo.