By default,当您通过令牌登录时,Devise会将用户存储在会话中,就像在数据库身份验证策略中一样。
您可以通过在设计初始设置stateless_token
到true
禁用此:
Devise.setup do |config|
config.stateless_token = true
end
这种方式,令牌必须提供每个请求。
据我所知,令牌认证被设计为与数据库认证一起使用。 devise_for
只会在您的型号为database_authenticatable
时添加会话路由。这对Devise来说似乎是一个小小的疏漏,但在我看来,离开用户进入session的令牌对我来说并没有多大意义。
无论如何,请尝试手动定义到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指定哪些路由创建和它们指向什么。
嘿马泰斯,感谢您的指针。我想我实际上喜欢存储用户会话,而不是随每个请求一起携带令牌。我的问题更多的是,如果我不*使用无状态令牌认证,我如何在最后登录用户? IOW,我该如何结束Devise为我存储的会话? –
你是怎么学习这些东西的?你读过RDocs,还是只是直接找到源代码? –
@Jo,更新了答案。我在为自己的项目配置Devise时了解了无状态令牌。我总是先阅读文档。当文档没有我想知道的内容,或者当我需要了解事情的工作方式时,我只会去源代码。 (当我需要回答诸如此类的问题时,这很有帮助!:P)虽然理解内部运作是有帮助的,但并不总是可行或现实的(例如,Rails的代码库非常庞大),所以总是要为文档,文章,教程,无论你能找到什么,首先。 –