[英]set timeout for a token in rails
如何為給定的身份驗證令牌設置超時? 超時后,令牌將被刪除,用戶將無法在其請求中使用它。
我正在使用 rails 3 並進行設計。
我也在尋找這個功能,但沒有找到直接實現的方法。
您可以在每次登錄時重置身份驗證令牌,並在中間使用可記住的令牌:
在您的應用程序控制器中,在 after_sign_in_path_for() 中:
resource.reset_authentication_token
在設計.rb:
config.remember_for = 1.day
或者您可以創建一個 cron-job 來定期清除 users 表中無效的 authentication_token 條目。
我不確定這是否正是您要找的,但這是 Devise 中的一個簡單選項。 如果在config/initializers/devise.rb
設置以下選項
config.timeout_in = 30.minutes
然后設計將在 30 分鍾不活動后使令牌過期。 Devise 為會話身份驗證所做的相同操作也應該與authentication_token
。
我在我當前的項目中使用了它並使用Timecop
gem 對其進行了測試:
it "should timeout without activity after 30 minutes" do
auth_token = @user.authentication_token
get "/frontend/users/#{@user.id}.json?auth_token=#{auth_token}"
response.status.should == 200
Timecop.travel(45.minutes.from_now)
get "/frontend/users/#{@user.id}.json?auth_token=#{auth_token}"
response.status.should == 401
Timecop.return
end
此外,我不認為令牌與其中一條評論中提到的用戶/密碼組合類似,因為您不會以純文本形式存儲密碼,但會使用令牌進行存儲。 我也建議在每次注銷后重置令牌。
在設計初始值設定項文件
#/config/initializers/devise.rb
# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again. Default is 30 minutes.
config.timeout_in = 1.day
# If true, expires auth token on session timeout.
config.expire_auth_token_on_timeout = true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.