设计-如何检查重置密码是否为令牌有效

时间:2020-03-31 19:39:00

标签: ruby-on-rails ruby devise devise-recoverable

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

这就是我所拥有的

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

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

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

设计重置密码令牌将存储为散列值。您需要对其进行解码。

  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

此方法将返回,truefalse