设计 send_reset_password_instructions 不起作用

Dim*_*ian 5 ruby-on-rails heroku devise

我在控制器中添加一个功能,唯一的目标是通过 API 请求触发忘记密码过程。

这是reset_password方法-

  def reset_password
    @user = User.find_by_email(params[:email])
    @user.send_reset_password_instructions
    respond_to do |format|
      format.xml  { render :xml => user_api_ressource(@user, :xml)}
      format.json  { render :json => user_api_ressource(@user, :json)}
    end
  end
Run Code Online (Sandbox Code Playgroud)

我收到带有重置密码链接的邮件,它会打开一个页面,我可以在其中设置新密码,但当我提交表单时,它说令牌无效。

我正在使用 sendgrid 发送电子邮件。我认为这不是令牌截断问题。

我正在使用最新版本的 devise 在 Heroku cedar 上运行 Rails 应用程序。

任何想法 ?

Aug*_*ger 1

我刚刚遇到了同样的问题。就我而言,这是user因为unscoped. 在这种情况下似乎没有找到用户。

它位于/lib/devise/models/authenticable.rb 的Devise 源代码中的第 113 行

      recoverable = find_or_initialize_with_error_by(:reset_password_token, reset_password_token)
Run Code Online (Sandbox Code Playgroud)

哪个不用搜索unscoped

我将分叉该存储库,如果您也感兴趣,请告诉我。