Переписать метод get_token в стратегии OAuth - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь написать класс стратегии OAuth для API, предоставляемого TikTok. (Документ здесь )

Я пытаюсь получить токен с помощью метода get_token, реализованного в классе OAuth2 :: Client. Ответ API не является тем, который определен в этом базовом классе (есть вложенный хеш с «данными»)

{
   "code": 0,
   "msg": "",
   "data": {
        "access_token": "",
        "expires_in": 86400,
        "refresh_token": "",
        "advertiser_id": 0,
        "refresh_token_expires_in": 604800,
   }
}

, поэтому я попытался переопределить метод get_token в классе пользовательской стратегии следующим образом. Скопировал большую часть детали из исходного метода и изменил, чтобы искать data в объекте JSON.

def get_token(params, access_token_opts = {}, access_token_class = OAuth2::AccessToken)
    params = Authenticator.new(id, secret, options[:auth_scheme]).apply(params)
    opts = {:raise_errors => options[:raise_errors], :parse => params.delete(:parse)}
    headers = params.delete(:headers) || {}
    if options[:token_method] == :post
      opts[:body] = params
      opts[:headers] = {'Content-Type' => 'application/x-www-form-urlencoded'}
    else
      opts[:params] = params
      opts[:headers] = {}
    end
    opts[:headers].merge!(headers)
    response = client.request(options[:token_method], token_url, opts)
    if options[:raise_errors] && !(response['data'].parsed.is_a?(Hash) && response['data'].parsed['access_token'])
      error = Error.new(response)
      raise(error)
    end
    access_token_class.from_hash(self, response['data'].parsed.merge(access_token_opts))
end

Теперь я вижу это исключение. Может ли кто-нибудь помочь мне?

неинициализированная константа OmniAuth :: Strategies :: OAuth2 :: AccessToken

def get_token(params, access_token_opts = {}, access_token_class = OAuth2::AccessToken)
    params = Authenticator.new(id, secret, options[:auth_scheme]).apply(params)
    opts = {:raise_errors => options[:raise_errors], :parse => params.delete(:parse)}
    headers = params.delete(:headers) || {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...