仅在确认电子邮件后才允许设置密码重置

时间:2016-10-13 02:53:00

标签: ruby-on-rails email devise

我有一个非常标准的设计安装,同时启用了recoverableconfirmable

如果用户尚未确认他们的电子邮件,我需要禁用密码重置

例如:

  • 用户使用email @example.com
  • 注册
  • 发送确认邮件
  • 用户在确认其电子邮件之前前往并重置密码
  • 重置密码电子邮件不应发送

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但是我有相同的用例,并通过为用户模型覆盖devise send_reset_password_instructions方法来解决了这个问题。这是我方法的最终版本:

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

更具体地说-如果用户保留在数据库中但未通过电子邮件验证,则添加错误并忽略重置密码电子邮件发送。