ruby on rails - 我如何覆盖Devise recoverable.rb - 特别是reset_password_by_token

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby on rails - 我如何覆盖Devise recoverable.rb - 特别是reset_password_by_token相关的知识,希望对你有一定的参考价值。

继我之前的问题ruby on rails 4 - devise - send_reset_password_instructions - reset password - Reset password token is invalid

我想覆盖devise recoverable.rb,特别是reset_password_by_token方法。原因是调试重置密码问题。

我该怎么做 ?

我尝试创建app / models / recoverable.rb并输入如下代码:

class Recoverable < Devise:: Models

    def reset_password_by_token(attributes={})
        puts "reset_password_by_token test"
        super
    end 

end 

重置密码后,控制台中没有打印。我正在使用gem'trail','4.2.4'

如何覆盖reset_password_by_token方法

答案

您需要将猴子补丁放在完全相同的命名空间中:

module Devise
  module Models
    module Recoverable
      module ClassMethods
        def reset_password_by_token(attributes={})
          ...
          super
        end
      end
    end
  end
end

https://github.com/plataformatec/devise/blob/f39c6fd92774cb66f96f546d8d5e8281542b4e78/lib/devise/models/recoverable.rb

另一答案

devise.rb初始化文件中,在devise.setup块中,尝试添加下面的代码

Devise::Models::Recoverable::ClassMethods.module_eval do
    def reset_password_by_token(attributes={})
       debugger
    end
end
另一答案

只需将其作为类函数添加到用作设计资源的任何模态(ei。用户):

class User < ActiveRecord::Base
  devise :recoverable

  def self.reset_password_by_token(attributes={})
    # custom code...
    super
  end
end

以上是关于ruby on rails - 我如何覆盖Devise recoverable.rb - 特别是reset_password_by_token的主要内容,如果未能解决你的问题,请参考以下文章

Ruby-on-Rails:如何摆脱“你被重定向”页面

Ruby on Rails 如何使用 yield 进行布局?

如何解决 ruby​​ on rails 版本差异(向后/向前兼容性)

ruby on rails如何安装

如何在 ruby​​ on rails 中命名外键?

Ruby on Rails 6.0.2.2 版如何使用jQuery hover() 方法