Расширение класса 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 ответ

Решение

Да, вам не нужно обезьяньего патча. Есть несколько вещей, которые вы можете попробовать.

  1. Разветвите драгоценный камень и внесите изменения в свой форк, не забывая обновлять свой форк, когда есть изменения.

    1. Перейдите на github и раскошелиться на самоцвет "Хранителя дверей": https://github.com/doorkeeper-gem/doorkeeper.
    2. Если вы используете Gemfile для своего проекта Ruby, обязательно укажите на свой форк гема, например

      gem 'doorkeeper', github: 'USERNAME/doorkeeper' 
      
  2. Если изменение в вашем форке с помощью настраиваемого поля достаточно универсальное, выполните запрос на извлечение, но есть вероятность, что это не сработает, поскольку хэш предназначен для ответа токена OAuth.

Другие вопросы по тегам