[英]How can I sign out a devise user from the Rails console?
我的設計用戶是“database_authenticable”和“token_authenticable”。 我已經嘗試從控制台為該用戶刪除數據庫中的“authentication_token”字段,但他們似乎仍然能夠使用現有的身份驗證令牌。 刪除用戶完全有效,但我不想走那么遠。
編輯:為了清楚起見。 我想使用 rails控制台注銷用戶。 即運行rails console
,然后運行一些命令。
Devise 提供了輔助方法來做這些事情:
user = User.find(params[:id])
sign_in user
sign_out user
希望這可以幫助。
如果您使用的是 Devise,您可以在Rails 控制台中使用以下內容。 如果您每個用戶帳戶僅使用 1 個會話,這對我來說非常適用,就像在我的應用程序中一樣。 我將我的會話存儲在 redisDB 中。
user = User.first
user.update_attributes(unique_session_id: "")
我所要做的就是為該用戶清除我的用戶 unique_session_id 並且 rails 將用戶踢出會話。
但是對於同一用戶帳戶的多個會話,這不起作用。
如果要清除所有用戶會話,可以從終端執行以下操作
rake db:sessions:clear
要通過設計登錄,請在控制台中以這種方式檢查:
$ rails console
include Warden::Test::Helpers
def sign_in(resource_or_scope, resource = nil)
resource ||= resource_or_scope
scope = Devise::Mapping.find_scope!(resource_or_scope)
login_as(resource, scope: scope)
end
def sign_out(resource_or_scope)
scope = Devise::Mapping.find_scope!(resource_or_scope)
logout(scope)
end
@user = User.find(1)
sign_in @user
然后打開http://127.0.0.1:3000/users/sign_in
進行測試,在我的情況下它會繞過這個頁面並進入主頁! 與sign_out
相同!
我不喜歡sign_out @user
模式,因為至少對於我正在使用的設計版本,它會注銷當前用戶,而不管我傳遞的參數如何。 如果您將會話存儲在數據庫中,則可以執行以下操作:
@user.update_attributes(current_sign_in_token: "")
TBH 我不認為這是最好的方法,但這是我在自己的研究中看到的最好的方法。
我相信您可以簡單地更新 password_salt 並且它會在下一次請求時使用戶會話無效。
user = User.first
user.update_column(:password_salt, 'reset')
參考: http : //www.jonathanleighton.com/articles/2013/revocable-sessions-with-devise/
對於舊設備版本
似乎屬性令牌保存會話:
user.tokens = nil
user.save
您可以在 views->layouts->application.html.erb 中創建一個注銷鏈接:-
<= link_to 'Log Out', destroy_user_session_path, method: :delete %>
它對我有用 - 希望對其他人也有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.