簡體   English   中英

在 rails 中為令牌設置超時

[英]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.

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