簡體   English   中英

擴展Doorkeeper TokenResponse類

[英]Extending Doorkeeper TokenResponse class

我需要擴展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類來做到這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 gem是否會破壞它。

是的,您不需要猴子補丁。 您可以嘗試一些方法。

  1. 分叉寶石並在叉子中進行更改,同時確保在有更改時更新叉子。

    1. 轉到github並分叉Doorkeeper Gem: https : //github.com/doorkeeper-gem/doorkeeper
    2. 如果您在Ruby項目中使用Gemfile,請確保指向您的gem分支,例如

       gem 'doorkeeper', github: 'USERNAME/doorkeeper' 
  2. 如果您使用自定義字段在派生中所做的更改足夠通用,請執行拉取請求,但由於哈希值是針對OAuth令牌響應的,因此這可能不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM