Pregunta

configuración Así, acabo usando Rails 3, idearán y OmniAuth a través de https: / /github.com/plataformatec/devise/wiki/OmniAuth:-Overview .

Estoy autenticación satisfactoria a los usuarios a través de Facebook, pero no son "inmemorable" a pesar de estar marcado con:

devise [...]: rememberable, :omniauthable

He intentado llamar a:

@the_user.remember_me!

... en vano. Ninguna cookie se almacena / set lo que significa que el usuario no en distintas sesiones.

¿Alguien ha conseguido que un usuario procedente de FB recordado a través de las cookies? En mi opinión, esto debería estar sucediendo de forma automática.

Gracias por cualquier idea o sugerencia que ustedes puedan tener.

¿Fue útil?

Solución

Estoy de acuerdo que se puede esperar Diseñar para establecer una sesión antes de que la solicitud va a FB. Creo que esta es una característica que falta de inventar.

tuve el problema mismo donde solía token_authenticatable. Un cliente de API estaba llamando a la siguiente dirección URL directamente:

/users/auth/facebook?auth_token=TnMn7pjfADapMdsafOFIHKgJVgrBEbjKqrubwMXUca0n16m3Hzr7CnrP1s4z

Desde que estaba usando i token_authenticatable fue asumiendo este firmaría en el usuario. Desafortunadamente esto no funciona fuera de la caja. Lo que tienes que hacer para conseguir este trabajo es asegurarse de que el usuario está conectado antes de que llegue a este camino. Lo puede hacer de otras maneras, pero la forma más fácil es dar una dirección URL diferente para el cliente API (en este caso "usuarios / conexión / facebook". Aquí está mi además del archivo de rutas que hace que funcione (suponiendo que tiene un modelo de usuario con el legado y no ha cambiado los valores predeterminados):

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

Esto hará que la sesión se crea correctamente lo que el usuario está siendo reconocido cuando él / ella regresa de facebook.

Otros consejos

Me gustaría dar más detalles sobre la respuesta (correcta) @ Jeroen-van-Dijk dio por encima del cual trabajó para mí.

En config / routes.rb, añadir 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

A continuación, cambiar su enlace de "inicio de sesión utilizando facebook", para usar 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 funciona bien para mí usando Rails 3.1 y diseñar 1.4.9.

Se fija por colaboradores Idear: Usted sólo debe agregar

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

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

FYI - si desea utilizar también la función de extend_remember_period de legado - necesita forzar esto en el objeto de usuario en el controlador de devolución de llamada

añadido una línea a @ mustafaturan de respuesta

user.remember_me = true
user.extend_remember_period = true

# then add your signing in code 
sign_in(:user, user)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top