1

我试图弄清楚如何在加载重置密码表单之前检查用户重置令牌是否有效。问题是,目前用户直到提交后才发现。

这是我所拥有的

class PasswordsController < Devise::PasswordsController
before_action :check_valid_token

private

def check_valid_token
  resetCode = (params['resetCode'])
  reset_password_token = Devise.token_generator.digest(self, :reset_password_by_token, resetCode)
  user = User.find_by(reset_password_token: @reset_password_token)
  if user == nil
    redirect_to root_path
  end
end
end

这不起作用,我找不到太多文档。

4

2 回答 2

3

设计重置密码令牌将存储为哈希值。你需要解码它。

  def check_valid_token
    token = Devise.token_generator.digest(User, :reset_password_token, params['reset_password_token'])
    user = User.find_by(reset_password_token: token)
    user.present?
  end

此方法将返回,true或者false

于 2021-08-11T11:33:57.897 回答
0

我会做一些基本的事情,比如:

def check_valid_token
  @user = User.find_by!(reset_password_token: params[:token])
rescue ActiveRecord::RecordNotFound
  redirect_to root_path
end

因此,如果令牌适合,您将拥有@user实例,如果不适合,它将将用户重定向到root_path. 您还可以在重定向之前添加一些消息,例如
flash.now[:error] = "Some message here"

于 2020-04-01T06:22:10.657 回答