Ruby on rails 仅在电子邮件确认后允许设计密码重置
我有一个非常标准的Desive安装,同时启用了Ruby on rails 仅在电子邮件确认后允许设计密码重置,ruby-on-rails,email,devise,Ruby On Rails,Email,Devise,我有一个非常标准的Desive安装,同时启用了可恢复和可确认 问题是,如果用户尚未确认其电子邮件,我需要禁用密码重置 例如: 用户通过电子邮件注册whatever@example.com 确认邮件已发送 用户在确认其电子邮件之前转到并重置密码 不应发送重置密码电子邮件 我知道这是一个老问题,但我有相同的用例,通过覆盖用户模型的designe send\u reset\u password\u instructions方法解决了它。以下是我的方法的最终版本: def self.send_rese
可恢复
和可确认
问题是,如果用户尚未确认其电子邮件,我需要禁用密码重置
例如:
- 用户通过电子邮件注册whatever@example.com
- 确认邮件已发送
- 用户在确认其电子邮件之前转到并重置密码
- 不应发送重置密码电子邮件
def self.send_reset_password_instructions(attributes={})
recoverable = find_or_initialize_with_errors(reset_password_keys, attributes, :not_found)
if (recoverable.persisted? && !recoverable.confirmed?)
recoverable.errors.add(:email, I18n.t('devise.failure.not_verified'))
else
recoverable.send_reset_password_instructions
end
recoverable
end
更具体地说,如果一个用户被持久保存在数据库中,但没有通过电子邮件验证,则添加一个错误并忽略重置密码电子邮件发送。我有这个问题,另外还有一个坏的副作用。当用户这样做并进入重置密码屏幕时,他可以键入他想要的任何密码,这两个密码甚至不必匹配。。奇怪。我没有遇到那种错误,但遇到了另一个错误。当您不确认电子邮件,并转到“密码重置电子邮件”提供的链接时,您只有一次机会更改它,否则它会显示“无效令牌”,但当您确认电子邮件时,一切正常