如何使用 Warden 实现 "forgot password"?

How to implement "forgot password" using Warden?

从Devise切换到直接使用的过程中Warden

我如何着手实施 Devise 开箱即用的 "forgot password" 功能?

是否有 gem 可以将其添加到 Warden 中?

PS。不使用 Devise 的原因是因为需要进行一些定制,这使得破解 Devise 使其工作变得不值得。

不知道有没有gem,不过自己做也不会花太长时间。假设每个帐户都有一个电子邮件附加到它。有一个忘记密码按钮 link 到一个页面,用户将在该页面输入用户名或用户独有的任何信息,一旦用户提交表单。将新密码发送到那里的电子邮件。

一步一步:

  1. 在您的登录页面上创建一个忘记密码按钮 link 到一个新的忘记密码页面。
  2. 为这个新的忘记密码页面创建路由、控制器操作。
  3. 在忘记密码页面上制作一个表格,其中包含有关用户的唯一信息。前任。用户名。此表单将是一个 post 对您控制器中的操作的请求,该操作将通过电子邮件将新密码发送给具有此用户名的用户。

    这是我的一个的样子:

    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
    
  4. 制作您的邮件。如果您不知道,本指南将介绍如何完成。 Mailers in Rails