【问题标题】:Extending Doorkeeper TokenResponse class扩展 Doorkeeper TokenResponse 类
【发布时间】:2014-09-11 09:30:47
【问题描述】:

我需要扩展Doorkeeper::OAuth::TokenResponse 类,因为我想在返回的数据中添加一些内容。默认情况下,该类创建一个返回体,如下所示:

{
  "access_token": "...",
  "token_type": "bearer",
  "expires_in": 7200,
  "refresh_token": "...",
  "scope": "some_scope"
}

我想保留它并添加一个新字段:

{
  "access_token": "...",
  "token_type": "bearer",
  "expires_in": 7200,
  "refresh_token": "...",
  "scope": "some_scope",
  "my_custom_field": 47
}

我可以在没有猴子补丁TokenResponse 类的情况下做到这一点吗?如果没有,我可以做些什么来改进我当前的实现(为了更好地兼容新版本的 Doorkeeper 等)? 这是我当前的实现:

module Doorkeeper
  module OAuth
    class TokenResponse
      old_body = instance_method(:body)

      define_method(:body) do
        body = old_body.bind(self).()
        if self.token.scopes.include? 'some_scope'
          body[:my_custom_field] = 47
        end
        body
      end
    end
  end
end

我确实对该功能进行了测试,所以我会知道升级 Doorkeeper gem 是否会破坏它。

【问题讨论】:

    标签: ruby-on-rails ruby doorkeeper


    【解决方案1】:

    是的,你不需要猴子补丁。您可以尝试一些方法。

    1. fork gem 并在你的 fork 中进行更改,同时确保在发生更改时更新你的 fork。

      1. 转到 github 并 fork Doorkeeper Gem:https://github.com/doorkeeper-gem/doorkeeper
      2. 如果您在 Ruby 项目中使用 Gemfile,请确保指向您的 gem 的分支,例如

        gem 'doorkeeper', github: 'USERNAME/doorkeeper' 
        
    2. 如果使用自定义字段的 fork 中的更改足够通用,请执行拉取请求,但这很可能不起作用,因为哈希用于 OAuth 令牌响应。

      李>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 2010-12-04
      • 2010-10-12
      相关资源
      最近更新 更多