2011-07-08 15 views
6

Para los modelos de usuario Idear que utilizan :token_authenticatable, al igual queCómo destruir la sesión ("cerrar sesión") con los usuarios de token autenticado

class Voter < ActiveRecord::Base 
    devise :token_authenticatable 
end 

que solía haber una ruta llamada destroy_user_session, por lo que se podía registrar usuarios cabo al vincular a destroy_user_session_path. Esto parece haber cambiado en las versiones recientes, ahora solo :database_authenticatable crea una ruta de destrucción para mí.

Entonces, para los usuarios que utilizan la autenticación de token, ¿cuál es la forma correcta de implementar una acción de "cerrar sesión"/"cerrar sesión" para finalizar sus sesiones?

Respuesta

5

By default, cuando inicia sesión mediante token, Devise almacenará al usuario en sesión como en la estrategia de autenticación de la base de datos.

Puede desactivar esta estableciendo stateless_token a true en el inicializador Diseñar:

Devise.setup do |config| 
    config.stateless_token = true 
end 

De esta manera, el testigo debe estar provisto de cada petición.


Según tengo entendido, la autenticación de token se diseñó para utilizarse junto con la autenticación de la base de datos. devise_for solo agregará las rutas de sesión si su modelo es database_authenticatable. Esto parece una supervisión menor por parte de Devise, pero en mi opinión, los tokens de acceso que dejan al usuario en sesión no tienen mucho sentido para mí.

De todos modos, intente definir manualmente las rutas de las sesiones de Devise.

Adaptado de Devise's routing helpers (código no probado):

as :user do # User scope 
    resource :session, :controller => 'devise/sessions' do 
    # new_user_session | GET /users/sign_in => devise/sessions#new 
    get :new, :path => 'sign_in', :as => "new" 

    # user_session | POST /users/sign_in => devise/sessions#create 
    post :create, :path => 'sign_in' 

    # destroy_user_session | GET /users/sign_out => devise/sessions#destroy 
    get :destroy, :path => 'sign_out', :as => "destroy" 
    end 
end 

En cualquier caso, the documentation for the devise_for helper especifica qué rutas se crean y lo que apuntan.

+0

Hola Matheus, gracias por el puntero. Creo que realmente me gusta la sesión de usuario que se está almacenando, en lugar de llevar el token junto con cada solicitud. Mi pregunta es más parecida a la siguiente: si * no * uso la autenticación de token sin estado, ¿cómo puedo desconectar al usuario al final? IOW, ¿cómo termino la sesión que Devise almacena para mí? –

+0

¿Cómo aprendiste estas cosas por cierto? ¿Leíste los RDOC, o simplemente fuiste directamente a la fuente? –

+1

@Jo, respuesta actualizada. Aprendí sobre tokens sin estado mientras configuraba Devise para mis propios proyectos. Siempre leo los documentos primero. Solo busco la fuente cuando la documentación no tiene lo que quiero saber o cuando necesito entender cómo funcionan las cosas. (¡Es útil cuando necesito responder preguntas como ésta!: P) Si bien es útil comprender el funcionamiento interno, no siempre es posible o realista (la base de código de Rails, por ejemplo, es enorme), así que siempre opte por el documentación, artículos, tutoriales, lo que sea que puedas encontrar, primero. –

Cuestiones relacionadas