我需要扩展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是否会破坏它。
答案 0 :(得分:2)
是的,你不需要修补补丁。你可以尝试一些事情。
分叉gem并在fork中进行更改,同时确保在发生更改时更新fork。
如果您正在为您的Ruby项目使用Gemfile,请务必指向您的gem的分支,例如
gem 'doorkeeper', github: 'USERNAME/doorkeeper'
如果使用自定义字段对fork的更改是通用的,请执行pull请求,但这可能不起作用,因为哈希是针对OAuth令牌响应的。