rails google generate facebook devise ruby-on-rails-3 omniauth

facebook - google - omniauth rails api



Devise y OmniAuth recordando OAuth (4)

Es arreglado por los contribuidores de dispositivos: Usted debe simplemente agregar

user.remember_me = true # then add your signing in code sign_in(:user, user)

ref: https://github.com/plataformatec/devise/issues/776#issuecomment-807152

Entonces, acabo de configurarme con Rails 3, Devise y OmniAuth a través de https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview .

Estoy autentificando exitosamente a los usuarios a través de Facebook, pero no son "recordables" a pesar de estar marcados con:

devise [...]: rememberable, :omniauthable

Intenté llamar:

@the_user.remember_me!

...en vano. No se almacena / configura ninguna cookie, lo que significa que el usuario no persiste en las sesiones.

¿Alguien ha logrado que un usuario de FB sea recordado a través de cookies? En mi opinión, esto debería estar sucediendo automáticamente.

Gracias por cualquier idea o comentario que ustedes puedan tener.


Estoy de acuerdo en que esperaría que Devise establezca una sesión antes de que la solicitud se envíe a FB. Supongo que esta es una característica que falta de Devise.

Yo mismo tuve el problema donde usé token_authenticatable. Un cliente de API estaba llamando directamente a la siguiente url:

/users/auth/facebook?auth_token=TnMn7pjfADapMdsafOFIHKgJVgrBEbjKqrubwMXUca0n16m3Hzr7CnrP1s4z

Como estaba usando token_authenticatable, asumí que esto iniciaría sesión en el usuario. Desafortunadamente esto no funciona fuera de la caja. Lo que debe hacer para que esto funcione es asegurarse de que el usuario haya iniciado sesión antes de llegar a esta ruta. Puede hacerlo de otras maneras, pero la forma más fácil es dar una URL diferente al cliente API (en este caso, "usuarios / conectar / facebook". Aquí está mi adición al archivo de rutas que lo hace funcionar (asumiendo que tiene un modelo de usuario con dispositivo y no cambió los valores predeterminados):

authenticate :user do get ''users/connect/:network'', :to => redirect("/users/auth/%{network}") end

Esto asegurará que la sesión se cree correctamente para que el usuario sea reconocido cuando regrese de facebook.


Me gustaría elaborar la respuesta (correcta) que @ jeroen-van-dijk dio arriba, la cual funcionó para mí.

En config / route.rb, agregue una nueva ruta en el bloque devise_for:

devise_for :users, :controllers => { :omniauth_callbacks => "user_omniauth_callbacks" } do ... get ''/users/connect/:network'', :to => redirect("/users/auth/%{network}"), :as => ''user_oauth_connect'' end

Luego cambie su enlace de "iniciar sesión usando Facebook" para utilizar la nueva ruta:

<!-- before it linked to user_omniauth_authorize_path --> <%= link_to "Sign in using Facebook", user_oauth_connect_path(:facebook) %>

En app / controllers / user_omnniauth_callbacks_controller.rb

class UserOmniauthCallbacksController < Devise::OmniauthCallbacksController include Devise::Controllers::Rememberable def facebook @user = User.find(...) ... remember_me(@user) # set the remember_me cookie end end

Esta solución me funciona bien usando Rails 3.1 y Devise 1.4.9.


fyi: si desea utilizar también la función extend_remember_period en el dispositivo, debe forzar esto en el objeto de usuario en el controlador de devolución de llamada

Se agregó una línea a la respuesta de @Mustafaturan.

user.remember_me = true user.extend_remember_period = true # then add your signing in code sign_in(:user, user)