我的一个网站上有一个奇怪的错误。我使用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'页面),链接决定无效。
我想不出为什么浏览器会有所作为。我认为这可能是由于系统时间可能但在两种浏览器中都是一样的吗?
感激任何想法 - 最多
答案 0 :(得分:0)
不应该有所作为。确保在发送易腐令牌后不保存用户 - 易于保存的令牌将在保存时更改。