扩展门卫TokenResponse类

时间:2014-09-11 09:30:47

标签: ruby-on-rails ruby doorkeeper

我需要扩展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

我确实对该功能进行了测试,因此我将知道升级门卫gem是否会破坏它。

1 个答案:

答案 0 :(得分:2)

是的,你不需要修补补丁。你可以尝试一些事情。

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

    1. 转到github并分叉门卫宝石:https://github.com/doorkeeper-gem/doorkeeper
    2. 如果您正在为您的Ruby项目使用Gemfile,请务必指向您的gem的分支,例如

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