簡體   English   中英

如何從 Rails 控制台注銷設計用戶?

[英]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相同!

在包含必要的模塊后,您也許可以使用其他人提到的幫助程序:

include Devise::Controllers::SignInOut

來源: 模塊:設計::控制器::SignInOut

還有另一個問題,SO如果有人股不使用設計助手涉及的方法在這里

我不喜歡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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM