在Devise中重置密码令牌不匹配的问题

问题描述

我正在使用Devise构建应用程序。 我遇到的问题与密码重置过程有关。

如果用户忘记了密码,请输入注册的电子邮件地址,并向该地址发送密码重置通知。 到目前为止,它可以按预期运行。

问题

电子邮件中收到的密码重置令牌与应用程序生成的密码重置令牌不匹配。 因此,当我尝试从收到的电子邮件中重置密码时,出现错误“令牌无效”。

========================

显示我的代码。

宝石文件

gem 'devise'
gem 'omniauth'
gem 'omniauth-google-oauth2'
gem 'omniauth-facebook'
gem 'devise-i18n'

routes.rb

  devise_for :users,controllers: {
registrations: 'users/registrations',sessions:      'users/sessions',confirmations: 'users/confirmations',omniauth_callbacks: 'users/omniauth_callbacks'

}

model / user.rb

  devise :database_authenticatable,:registerable,:recoverable,:rememberable,:validatable,:confirmable,:omniauthable,omniauth_providers: %i[google_oauth2]


 def self.from_omniauth(auth)
    where(provider: auth.provider,uid: auth.uid).first_or_create do |user|
      user.email = auth.info.email
      user.password = Devise.friendly_token[0,20]
      user.skip_confirmation!
    end
  end


  def update_without_current_password(params,*options)
    params.delete(:current_password)

    if params[:password].blank? && params[:password_confirmation].blank?

      params.delete(:password)
      params.delete(:password_confirmation)
    end

    result = update_attributes(params,*options)
    clean_up_passwords
    result
  end

views / users / mailer / reset_password_instructions.html.erb

<%= link_to 'パスワードの変更を行う',edit_password_url(@resource,reset_password_token: @token) %>

======================================

我搜索了很多次,但是找不到太多新信息,因为它只是旧信息。

为什么令牌不匹配? 如何通过电子邮件发送生成的令牌? 请帮助某人。

※我英语不好。可能有错误。

解决方法

您必须为重置令牌创建一个新表。

模式可以像

),you can pass each text element to 

每当用户要请求更改密码时。在此password_reset_tokens中创建一个带有随机reset_token字符串的条目,并为其分配一个user_id。 在带有链接的电子邮件中发送此令牌,当用户单击它时,将重置令牌。打开带有新密码字段的表单,并在通过该链接更新密码后,将is_active标记为false。

其他步骤:

您还可以编写一个cron来使x小时后的reset_tokens失效。每当生成新的reset_passsword_token时,您都可以安排cron在x小时后过期。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...