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

时间:2018-05-22 08:51:35

标签: ruby-on-rails ruby-on-rails-4 devise reset-password

关注我之前的问题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&#39; rails&#39;,&#39; 4.2.4&#39;

如何覆盖reset_password_by_token方法

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

只需将其作为类函数添加到用作模式资源(例如用户)的任何模式中即可:

class User < ActiveRecord::Base
  devise :recoverable

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