Rails Version: 5.0.0.1
Devise Version: 4.2
在我的devise.rb文件中,我将密码令牌的生命周期定义为6小时
# Time interval you can reset your password with a reset password key.
# Don't put a too small interval or your users won't have the time to
# change their passwords.
config.reset_password_within = 6.hours
当我通过忘记密码链接选择密码重置时,我可以看到生成的时间戳和令牌
postgres=> select reset_password_token, reset_password_sent_at from users where email='email@gmail.com';
reset_password_token | reset_password_sent_at
------------------------------------------------------------------+----------------------------
89f51bce1bc6b495c16a50b015d03897d0520a8b58c300a5deef16b2c45cac82 | 2016-09-16 21:18:01.322362
活动记录和应用程序时区都设置为'Asia/Kolkata'
但是当我点击电子邮件中提供的链接并尝试更改密码(在发送电子邮件的几分钟内)时,密码更改失败并显示消息
重置密码令牌已过期,请申请新密码
更新一个
我在用户模型中启用了recoverable
,但此处没有用。
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable,
:recoverable, :rememberable, :trackable, :validatable, :lockable, :timeoutable
end
更新两个
以下是实施答案
中建议的更改后的日志将设计配置更新为
# Time interval you can reset your password with a reset password key.
# Don't put a too small interval or your users won't have the time to
# change their passwords.
config.reset_password_within = 6.hours.from_now
密码更新仍然失败,日志中也没有真正的错误。
I, [2016-09-19T20:54:04.793217 #19146] INFO -- : Started PUT "/users/password" for ::1 at 2016-09-19 20:54:04 +0530
I, [2016-09-19T20:54:04.795888 #19146] INFO -- : Processing by Devise::PasswordsController#update as HTML
I, [2016-09-19T20:54:04.796108 #19146] INFO -- : Parameters: {"utf8"=>"✓", "authenticity_token"=>"hXJycHI8Xmwo5D1pTS6a+naO1aV6PUDoqNw1kLjxWksF1zf+dEJ/j2KnmlOt0JSSe4F53cVP4uyBw1Pe0G4u8Q==", "user"=>{"reset_password_token"=>"[FILTERED]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Change my password"}
D, [2016-09-19T20:54:04.803200 #19146] DEBUG -- : User Load (3.8ms) SELECT "users".* FROM "users" WHERE "users"."reset_password_token" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["reset_password_token", "f278c026f607eea0f948e79e16861a90c9f1c73af271b2b803787f5fb68bdd04"], ["LIMIT", 1]]
答案 0 :(得分:0)
好吧,我不认为这是一个时区问题。您可能想知道关于Devise
的以下内容。
这是您模型的Devise模块列表。
因此,如果您有重置忘记密码问题,您可能需要确保模型中已启用recoverable
。
例如,如果用户模型(user.rb),您将拥有
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable, :lockable
启用recoverable
对于处理您在Devise中重置忘记的密码非常重要。
答案 1 :(得分:0)
我在更改 Rails 时区后遇到了同样的问题。
我可以解决在 mi 用户模型上设置为 nil 重置密码字段的问题:
User.update_all(reset_password_token: nil, reset_password_sent_at: nil)