Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 扩展Doorkeeper响应类_Ruby On Rails_Ruby_Doorkeeper - Fatal编程技术网

Ruby on rails 扩展Doorkeeper响应类

Ruby on rails 扩展Doorkeeper响应类,ruby-on-rails,ruby,doorkeeper,Ruby On Rails,Ruby,Doorkeeper,我需要扩展Doorkeeper::OAuth::TokenResponse类,因为我想向返回的数据添加一些内容。默认情况下,该类创建如下返回体: { "access_token": "...", "token_type": "bearer", "expires_in": 7200, "refresh_token": "...", "scope": "some_scope" } 我希望保留该字段并添加一个新字段: { "access_token": "...", "t

我需要扩展
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
}
我可以在不使用monkey patching
TokenResponse
class的情况下实现这一点吗?如果没有,我可以做些什么来改进我当前的实现(为了更好地与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是否会破坏它。

是的,您不需要使用monkey补丁。有几件事你可以试试

  • 分叉gem并在分叉中进行更改,同时确保在发生更改时更新分叉

  • 去github,用叉子叉门卫宝石:
  • 如果您正在为您的Ruby项目使用Gemfile,请确保指向您的gem分支,例如

    gem 'doorkeeper', github: 'USERNAME/doorkeeper' 
    
  • 如果fork中的custom字段的更改足够通用,那么执行pull请求,但很可能这不起作用,因为散列用于OAuth令牌响应