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的代碼庫非常龐大),所以總是要爲文檔,文章,教程,無論你能找到什麼,首先。 –