繁体   English   中英

Rail 4 Devise 3.2忘记密​​码令牌无效

[英]Rail 4 Devise 3.2 forgot password token is invalid

每当我设置新密码时,都会收到无效的令牌错误消息。 我已经在Devise中调试了此方法,reset_password_token = Devise.token_generator.digest(self,:reset_password_token,params [:reset_token]),令牌确实不同于数据库中保存的令牌。 有人在这里吗?或者知道令牌为什么不同吗?

编辑:这是我用来覆盖Devise :: PasswordController的控制器代码

class PasswordsController < Devise::PasswordsController

 def edit
   original_token       = params[:reset_password_token]
   reset_password_token = Devise.token_generator.digest(self, :reset_password_token, original_token)
   self.resource = resource_class.find_or_initialize_with_error_by(:reset_password_token, reset_password_token)
   if !resource.errors.empty?
     flash[:alert] = "Password token is invalid"
     redirect_to new_session_path(resource_name)
   end
  end
end

问题是与以下行

Devise.token_generator.digest(self, :reset_password_token, original_token)

第一个参数应该是充当用户模型的模型类。 目前,您传递了PasswordsController类。 如果您还命名用户模型User则将该行更改为

Devise.token_generator.digest(User, :reset_password_token, original_token)

您需要检查reset_password_period_valid?

if resource.reset_password_period_valid?
  set_minimum_password_length
  resource.reset_password_token = params[:reset_password_token]
else
  flash[:alert] = 'Your password reset link has expired, please enter your email to send a new one.'
  redirect_to new_password_path(resource_name)
end

除非您尝试通过令牌更新,否则过期的令牌错误不会添加到资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM