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