Authlogic易腐性令牌 - 它们是浏览器特定的吗?

时间:2010-11-05 13:06:43

标签: ruby-on-rails authlogic

我的一个网站上有一个奇怪的错误。我使用authlogic来处理所有与登录相关的东西,包括密码重置过程,其工作方式如下:

首先,用户输入他们的电子邮件地址并点击按钮发送重置密码链接。在随后的行动中,我这样做:

user.reset_perishable_token!
user.host = request.host_with_port
token = user.perishable_token

'token'进入他们随后发送的电子邮件中的链接,其格式为:

<domain name>/users/edit_password?id=1670&token=y1j6k__imXOajyNGq8DN

其中id是用户的id,而token是我刚刚生成的令牌。

在电子邮件链接指向的操作上,我这样做:

@user = User.find_using_perishable_token(params[:token], 1.day)

根据@user是否为空,我决定令牌是否有效,他们可以继续更改密码。一般情况下工作正常,但我有一个问题,如果有人在一个浏览器中生成重置电子邮件,然后在另一个浏览器中收到电子邮件并点击它(从而打开浏览器B中的'edit_password'页面),链接决定无效。

我想不出为什么浏览器会有所作为。我认为这可能是由于系统时间可能但在两种浏览器中都是一样的吗?

感激任何想法 - 最多

1 个答案:

答案 0 :(得分:0)

不应该有所作为。确保在发送易腐令牌后不保存用户 - 易于保存的令牌将在保存时更改。