【问题标题】:Custom generated reset password token not recognized自定义生成的重置密码令牌无法识别
【发布时间】:2018-03-12 10:51:00
【问题描述】:

我有一个 Rails 应用程序,超级管理员可以在其中手动创建新用户。我需要向新用户发送一封电子邮件,以允许重置他的密码并连接到他的空间。

所以我尝试使用 reset_password_token 手动生成 unedit_user_password_path 并将其发送到用户的电子邮件:

def create
  raw, reset_password_token = Devise.token_generator.generate(
    User, :reset_password_token
  )
  @user = User.new(user_params)
  @user.reset_password_token = reset_password_token
  @user.reset_password_sent_at = Time.now.utc

  reset_password_url = Rails.configuration.endpoints['front'].to_s + Rails.application.routes.url_helpers.edit_user_password_path(reset_password_token: reset_password_token)
  # it generates http://localhost:3000/users/password/edit?reset_password_token=my_token_sent_by_email link, so it's good

  if @user.save(validate: false)
    AdminMailer.welcome_email(@user, reset_password_url).deliver
    render 'index'
  else
    render 'new'
  end
end

我的 user_params 方法是私有方法:

def user_params
  params.require(:user).permit(:name, :email, :role)
end

但是,当我按照生成的 edit_password_link 并尝试重置密码时,我遇到了来自 devise 的 token_invalid 错误。

当我尝试在 Rails 控制台中执行此操作时:

User.find_by(reset_password_token, my_token_sent_by_email) 

我从数据库中找到记录。

但是,当我为想要使用 devise 的 send_reset_password_instructions 更改密码的用户初始化重置密码链接时,它可以正常工作:

def send_pass
  @user = User.find(params[:id])
  @user.send_reset_password_instructions
  redirect_back(fallback_location: root_path)
end

谁能解释一下我犯了什么错误? 谢谢大家的回答

【问题讨论】:

    标签: ruby-on-rails devise reset-password


    【解决方案1】:

    所以,我终于找到了解决方案。

    当我们用

    生成令牌时
    raw, reset_password_token = Devise.token_generator.generate(User, :reset_password_token)
    

    我们需要将reset_password_token保存在数据库中(用corse的reset_password_sent_at,但我们需要在edit_password_link中发送原始数据:

    reset_password_url = Rails.configuration.endpoints['front'].to_s + Rails.application.routes.url_helpers.edit_user_password_path(reset_password_token: raw)
    

    【讨论】:

      猜你喜欢
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2015-05-15
      • 2015-09-23
      • 2012-09-16
      • 2020-07-13
      相关资源
      最近更新 更多