在从Devise切换到直接使用Warden。
的过程中如何实现Devise开箱即用的“忘记密码”功能?
是否有宝石可以将其添加到Warden?
PS。不使用Devise的原因是因为需要进行一些定制,这使得黑客设计使得它不值得工作。
答案 0 :(得分:2)
我不知道是否有宝石,但自己动手并不需要很长时间。假设每个帐户都附有一封电子邮件。忘记密码按钮,链接到用户将在其中输入用户名或用户特有的任何信息以及用户提交表单后的页面。发送新密码到那里发送电子邮件。
步骤一步:
在忘记密码页面上创建一个表单,其中包含有关用户的唯一信息。恩。用户名。此表单将是对控制器中某个操作的发布请求,该操作会将新密码通过电子邮件发送给拥有此用户名的用户。
这是我的一个看起来像:
def emailor
@user = User.find_by username: params[:user][:username]
random_password = Array.new(10).map { (65 + rand(58)).chr }.join
@user.password = random_password
if @user.save
UserMailer.reset_password_email(@user.email, random_password ).deliver
flash[:notice] = "Email has been sent";
redirect_to root_path
end
end
制作邮件。如果您不了解,本指南将介绍其完成方式。 Mailers in Rails