我正在处理具有可选电子邮件属性的Devise用户模型(他可以使用文档编号或电子邮件登录)。由于管理员可以注册新用户(设置他的密码),我想知道是否有办法让用户使用文件编号和生日来恢复他们的设计密码,然后注册一个新密码。
希望很清楚。感谢。
答案 0 :(得分:2)
好吧,如果此人已登录,您只需调用此模型中的相关方法(在用户上)即可恢复密码。我想您需要创建一个视图,然后根据控制器中的值验证重置密码的请求,然后根据current_user
调用正确的方法。我猜你需要send_reset_password_instructions
方法from this file。
视图上的简单表单应该这样做;如果值匹配(即,如果您能够根据文档编号和POST的生日值与从数据库调用的用户的预期值相比验证用户),则调用该方法并发送重置电子邮件。
如果您没有该用户的电子邮件地址(我怀疑可能是您的问题),那么您可以(在控制器中)而不是调用上述方法发送电子邮件,而是调用{{1}方法,传递他们的表单输入以获得新的所需密码,这将改变它。
编辑: This link也可能有用。
答案 1 :(得分:1)
我的解决方案基于@Alex的答案。我做了一个自定义密码重置视图。
在处理设计模型的密码要求时,有两个(或更多)选项:
首先,我们可以覆盖设计密码要求方法。这将保存没有密码的模型对象:
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
简而言之,这就是解决方案,包括带有生日,密码和密码确认的视图,验证控制器上的数据并覆盖密码。