对于使用:token_authenticatable
的Devise用户模型,如此
class Voter < ActiveRecord::Base
devise :token_authenticatable
end
以前有一个名为destroy_user_session
的路由,因此您可以通过链接到destroy_user_session_path
来注销用户。这似乎在最近的版本中发生了变化 - 现在只有:database_authenticatable
为我创建了一个销毁路径。
因此,对于使用令牌身份验证的用户,实施“注销”/“注销”操作以结束其会话的正确方法是什么?
答案 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都指定创建哪些路由以及它们指向的路径。