Расширение класса Doorkeeper TokenResponse
Мне нужно продлить 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.
1 ответ
Да, вам не нужно обезьяньего патча. Есть несколько вещей, которые вы можете попробовать.
Разветвите драгоценный камень и внесите изменения в свой форк, не забывая обновлять свой форк, когда есть изменения.
- Перейдите на github и раскошелиться на самоцвет "Хранителя дверей": https://github.com/doorkeeper-gem/doorkeeper.
Если вы используете Gemfile для своего проекта Ruby, обязательно укажите на свой форк гема, например
gem 'doorkeeper', github: 'USERNAME/doorkeeper'
Если изменение в вашем форке с помощью настраиваемого поля достаточно универсальное, выполните запрос на извлечение, но есть вероятность, что это не сработает, поскольку хэш предназначен для ответа токена OAuth.