我正在尝试弄清楚如何在加载重置密码表单之前检查用户重置令牌是否有效。问题是,当前用户直到提交后才发现。
这就是我所拥有的
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
这不起作用,我找不到太多的文档。
答案 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
此方法将返回,true
或 false