Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 仅在电子邮件确认后允许设计密码重置_Ruby On Rails_Email_Devise - Fatal编程技术网

Ruby on rails 仅在电子邮件确认后允许设计密码重置

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

我有一个非常标准的Desive安装,同时启用了
可恢复
可确认

问题是,如果用户尚未确认其电子邮件,我需要禁用密码重置

例如:

  • 用户通过电子邮件注册whatever@example.com
  • 确认邮件已发送
  • 用户在确认其电子邮件之前转到并重置密码
  • 不应发送重置密码电子邮件

我知道这是一个老问题,但我有相同的用例,通过覆盖用户模型的designe send\u reset\u password\u 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

更具体地说,如果一个用户被持久保存在数据库中,但没有通过电子邮件验证,则添加一个错误并忽略重置密码电子邮件发送。

我有这个问题,另外还有一个坏的副作用。当用户这样做并进入重置密码屏幕时,他可以键入他想要的任何密码,这两个密码甚至不必匹配。。奇怪。我没有遇到那种错误,但遇到了另一个错误。当您不确认电子邮件,并转到“密码重置电子邮件”提供的链接时,您只有一次机会更改它,否则它会显示“无效令牌”,但当您确认电子邮件时,一切正常