Ruby on rails 如何销毁具有令牌身份验证用户的会话(“注销”)
设计使用Ruby on rails 如何销毁具有令牌身份验证用户的会话(“注销”),ruby-on-rails,devise,Ruby On Rails,Devise,设计使用:token\u authenticable的用户模型,如下所示 class Voter < ActiveRecord::Base devise :token_authenticatable end 类投票者
:token\u authenticable
的用户模型,如下所示
class Voter < ActiveRecord::Base
devise :token_authenticatable
end
类投票者
以前有一个名为destroy\u user\u session
的路由,因此您可以通过链接到destroy\u user\u session\u path
将用户注销。这似乎在最近的版本中有所改变——现在只有:database_authenticable
为我创建了一条销毁路径
因此,对于使用令牌身份验证的用户,实施“注销”/“注销”操作以结束其会话的正确方法是什么?,当您通过令牌登录时,Desive将在会话中存储用户,就像在数据库身份验证策略中一样
您可以通过在设计初始值设定项中将无状态\u令牌
设置为真
来禁用此功能:
Devise.setup do |config|
config.stateless_token = true
end
这样,每个请求都必须提供令牌
据我所知,令牌身份验证旨在与数据库身份验证一起使用
Desive_for
仅在您的模型可验证时添加会话路由。这似乎是Desive的一个小疏忽,但在我看来,让用户在会话中访问令牌对我来说一开始就没有多大意义
无论如何,尝试手动定义Desive会话的路由
改编自(未经测试的代码):
在任何情况下,都可以指定创建了哪些路由以及它们指向什么。嘿,Matheus,谢谢你的指针。我想我实际上喜欢存储用户会话,而不是在每个请求中都携带令牌。我的问题是,如果我不使用无状态令牌身份验证,那么最后如何注销用户?瞧,我如何结束为我设计商店的课程?顺便说一句,你是如何学会这些东西的?你是读了RDocs,还是直接去找资料来源?@Jo,最新答案。我在为自己的项目配置Desive时了解了无状态令牌。我总是先看文件。我只在文档中没有我想知道的东西,或者我需要了解事情是如何工作的时候才去寻找源代码。(当我需要回答像这样的问题时,这很有帮助!:P)虽然理解内部工作原理很有帮助,但它并不总是可能的或现实的(例如Rails的代码库非常庞大),所以一定要先阅读文档、文章、教程,无论你能找到什么。非常好,谢谢。您发布的代码为您提供了
destroy\u session\u path
而不是destroy\u user\u session\u path
,以及/session/sign\u out
而不是/user/sign\u out
,我一生都无法弄清楚如何在资源
块中获得这两个路径,但这是我的注销路径,它根据需要签出用户(在destroy\u user\u session\u path
和user/sign\u out
):它使用的是像您的示例一样的GET——我认为designe的默认值可能是DELETE,但这是不必要的复杂。我刚刚发现,不是使用designe\u scope
a.k.a.作为
块,您只需将其放入design\u for:users
的块中即可。
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