Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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_Devise_Passwords_Password Recovery - Fatal编程技术网

Ruby on rails 自定义密码恢复装置

Ruby on rails 自定义密码恢复装置,ruby-on-rails,devise,passwords,password-recovery,Ruby On Rails,Devise,Passwords,Password Recovery,我正在处理一个带有可选电子邮件属性的Desive用户模型(他可以使用文档号或电子邮件登录)。由于管理员可以注册新用户(设置他的密码),我想知道是否有一种方法可以让用户使用文档号和出生日期恢复他们的设计密码,然后注册一个新密码 希望这是清楚的。谢谢。如果此人已登录,您只需调用此模型中的相关方法(在用户上)即可恢复密码。我想您需要创建一个视图,然后根据控制器中的这些值验证重置密码的请求,然后根据当前用户调用正确的方法。我猜您需要发送\u重置\u密码\u指令方法 一个视图上的简单表单就可以做到这一点;

我正在处理一个带有可选电子邮件属性的Desive用户模型(他可以使用文档号或电子邮件登录)。由于管理员可以注册新用户(设置他的密码),我想知道是否有一种方法可以让用户使用文档号和出生日期恢复他们的设计密码,然后注册一个新密码


希望这是清楚的。谢谢。

如果此人已登录,您只需调用此模型中的相关方法(在用户上)即可恢复密码。我想您需要创建一个视图,然后根据控制器中的这些值验证重置密码的请求,然后根据
当前用户调用正确的方法。我猜您需要
发送\u重置\u密码\u指令
方法

一个视图上的简单表单就可以做到这一点;如果值匹配(即,如果您能够根据POST中的文档编号和出生日期与数据库中调用的用户的预期值进行比较来验证用户),则调用该方法并发送重置电子邮件

如果您没有用户的电子邮件地址(我可能从您的问题中怀疑),那么您可以(在控制器中)调用
reset\u密码,而不是调用上述方法发送电子邮件
编辑:

可能也有一些用处。

我的解决方案基于@Alex answer。我做了一个自定义密码重置视图

在处理Desive模型上的密码要求时,有两个(或更多)选项:

首先,我们可以覆盖Desive密码要求方法。这将保存一个没有密码的模型对象:

def email_required?
  false
end
或者我们可以在对象创建后设置一个简单的令牌:

if athlete.new_record?
  generated_password = Devise.friendly_token[0,20]
  athlete.password = generated_password
  athlete.password_confirmation = generated_password
  athlete.skip_confirmation!
end
(可选)将上述行为放在模型上:

  def reset_password!(new_password, new_password_confirmation)
    self.password = new_password
    self.password_confirmation = new_password_confirmation
    save
  end
简单地说,这就是解决方案,包括带有生日、密码和密码确认的视图,验证控制器上的数据并覆盖密码