繁体   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