Ruby on rails 如何重写ommiauth库方法

Ruby on rails 如何重写ommiauth库方法,ruby-on-rails,omniauth,Ruby On Rails,Omniauth,我是ruby新手,尝试重写omniauth库方法。我想让它支持env.header。那么我如何在我的项目中进行这些更改呢?在Ruby类中,可以简单地覆盖mixin(包含的模块)提供的任何方法: 这意味着策略作者在编写策略类时可以简单地重写任何方法。因此,您可以在策略中简单地覆盖request\u call方法,这是一个更好的选择,因为大多数策略不需要在会话中存储所有请求头 由于OmniAuth::Strategy是一个模块而不是一个类,因此不能使用super调用原始方法。相反,您可以做的是在类中

我是ruby新手,尝试重写omniauth库方法。我想让它支持env.header。那么我如何在我的项目中进行这些更改呢?

在Ruby类中,可以简单地覆盖mixin(包含的模块)提供的任何方法:

这意味着策略作者在编写策略类时可以简单地重写任何方法。因此,您可以在策略中简单地覆盖
request\u call
方法,这是一个更好的选择,因为大多数策略不需要在会话中存储所有请求头

由于
OmniAuth::Strategy
是一个模块而不是一个类,因此不能使用
super
调用原始方法。相反,您可以做的是在类中重写mixin方法之前对其进行别名:

module OmniAuth
  class MyStrategy
    include Strategy

    class << self
      alias :original_request_call :request_call 
    end

    def self.request_call
      session['omniauth.headers'] = headers
      original_request_call
    end

    # ...
  end
end
module OmniAuth
班级策略
包含策略

欢迎来到stackoverflow,当你在这里创建一个问题时,你应该包括相关的代码或者至少一个简单的例子。如果您只链接到github存储库,您将被否决,您的问题可能会被关闭。谢谢您的回答。这对我来说非常有用。然而,我想知道这是否意味着我需要为我的用例编写自己的策略?我更喜欢在omniauth-facebook中添加此函数。在这种情况下,您可以创建FacebookStrategy的子类,也可以在运行时创建monkeypatch类。后者可能存在严重的维护问题。
module OmniAuth
  class MyStrategy
    include Strategy

    class << self
      alias :original_request_call :request_call 
    end

    def self.request_call
      session['omniauth.headers'] = headers
      original_request_call
    end

    # ...
  end
end