【发布时间】:2010-11-05 13:06:43
【问题描述】:
我的一个网站上有一个奇怪的错误。我将 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”页面),则决定链接无效。
我想不出为什么浏览器会有所作为。我认为这可能是由于系统时间,但这在两种浏览器中都是一样的,对吧?
感谢任何想法 - 最大
【问题讨论】: