如何使用经过令牌验证的用户销毁会话(“注销”)

时间:2011-07-08 20:09:03

标签: ruby-on-rails devise

对于使用:token_authenticatable的Devise用户模型,如此

class Voter < ActiveRecord::Base
  devise :token_authenticatable
end

以前有一个名为destroy_user_session的路由,因此您可以通过链接到destroy_user_session_path来注销用户。这似乎在最近的版本中发生了变化 - 现在只有:database_authenticatable为我创建了一个销毁路径。

因此,对于使用令牌身份验证的用户,实施“注销”/“注销”操作以结束其会话的正确方法是什么?

1 个答案:

答案 0 :(得分:5)

By default,当您通过令牌登录时,Devise会将用户存储在会话中,就像在数据库身份验证策略中一样。

您可以通过在设计初始值设定项中将stateless_token设置为true来停用此功能:

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

这样,必须为每个请求提供令牌。


据我了解,令牌身份验证旨在与数据库身份验证一起使用。 devise_for只会在您的模型为database_authenticatable时添加会话路由。这似乎是对Devise的一个小小的疏忽,但在我看来,访问令人离开用户的会话对我来说没有多大意义。

无论如何,尝试手动定义到Devise会话的路由。

改编自Devise's routing helpers(未经测试的代码):

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

在任何情况下,the documentation for the devise_for helper都指定创建哪些路由以及它们指向的路径。