Doorkeeper OAuth2-Client refresh_token работает только с оригинальным экземпляром клиента

Поэтому я использую doorkeeper в своем приложении на Rails 4 и создаю API-оболочку для него, чтобы помочь моим рубиновым пользователям. Почти все работает так, как должно. Я добавил клиента OAuth2, который выглядит так:

require 'oauth2-client'

module MyApiWrapper
  class OAuth2Client < OAuth2Client::Client

    SITE_URL       = 'https://myapp.com'
    TOKEN_PATH     = '/oauth/token'
    AUTHORIZE_PATH = '/oauth/authorize'

    def initialize(client_id, client_secret, opts={})
      site_url = opts.delete(:site_url) || SITE_URL
      opts[:token_path]     ||= TOKEN_PATH
      opts[:authorize_path] ||= AUTHORIZE_PATH
      super(site_url, client_id, client_secret, opts)
      yield self if block_given?
      self
    end

    ...

    def refresh!(token, opts={})
      opts[:authenticate] = :body
      refresh_token.get_token(token, opts)
    end
  end
end

Когда я впервые создаю экземпляр OAuth2Client и авторизую пользователя, он выглядит так:

client = MyApiWrapper::OAuth2Client.new(ENV['CLIENT_ID'], ENV['CLIENT_SECRET'])
response = client.exchange_auth_code_for_token(:params => {
  :code => params[:code],
  :redirect_uri => 'http://localhost:3000/auth/myapp/callback'
})
token = JSON.parse response.body
access_token = token["access_token"]
@refresh_token = token["refresh_token"]

Он отвечает парой токенов (с refresh_token) так, как должен. Используя тот же экземпляр OAuth2Client, что и раньше, я могу успешно обновить токен, чтобы получить новую пару токенов, например так:

response = client.refresh!(@refresh_token)

Однако, если я пытаюсь сделать то же самое с новым экземпляром OAuth2Client (позднее или в другом контроллере и т. Д.), Я получаю следующее сообщение об ошибке от привратника:

The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.

0 ответов

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