【问题标题】:Allow devise password reset only after email confirmation仅在电子邮件确认后才允许重置设计密码
【发布时间】:2017-02-22 00:25:24
【问题描述】:

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

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

例如:

  • 用户使用电子邮件whatever@example.com 注册
  • 确认邮件已发送
  • 用户在确认他的电子邮件之前进入并重置密码
  • 重置密码电子邮件不应发送

【问题讨论】:

  • 我有这个问题,再加上一个更糟糕的副作用。当用户这样做并进入重置密码屏幕时,他可以输入任何他想要的密码,两个密码甚至不必匹配..奇怪。
  • 我没有遇到这种错误,而是另一个错误。当你没有确认email并且你去你的“email with password reset”提供的链接时,你只有一次可以改变它,否则它会显示'invalid token`,但是当你确认email时,一切都很好

标签: ruby-on-rails email devise


【解决方案1】:

我知道这是一个老问题,但我有相同的用例并通过覆盖用户模型的设计 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2014-12-21
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多