Я пытаюсь настроить поставщика oauth2 на использование приложения, которое уже содержит omniauth и разрабатывает. User.rb теперь:
class User < ActiveRecord::Base
has_many :authentications
has_many :graphs
devise :database_authenticatable,
:registerable,
:recoverable,
:rememberable,
:trackable,
:validatable,
:omniauthable,
:token_authenticatable,
:oauth2_providable,
:oauth2_password_grantable,
:oauth2_refresh_token_grantable,
:oauth2_authorization_code_grantable
.......
}
Все остальное реализовано, как и ожидалось, но я получаю следующую ошибку, когда запускаю все это локально и пытаюсь использовать гем oauth2 (0.5.0) для подключения к моему клиенту.
Я в конечном итоге:
http://localhost:8080/oauth/callback?code=2ebd3d9d149b22becec37da7a8f1eb0d
, что вызывает исключение:
e.to_yaml
"--- !ruby/exception:OAuth2::Error\nresponse: &70266332040280 !ruby/object:OAuth2::Response\n response: &70266332040340 !ruby/object:Faraday::Response\n env:\n :method: :post\n :body: ! '{\"error\":\"invalid_grant\",\"error_description\":\"invalid authorization\n code request\"}'\n :url: !ruby/object:Addressable::URI\n validation_deferred: false\n scheme: http\n normalized_scheme: !!null \n uri_string: !!null \n hash: !!null \n host: localhost\n authority: !!null \n normalized_host: !!null \n port: 3000\n normalized_port: !!null \n path: /oauth2/token\n normalized_path: !!null \n query: !!null \n normalized_query: !!null \n :request_headers:\n Content-Type: application/x-www-form-urlencoded\n :parallel_manager: !!null \n :request:\n :proxy: !!null \n :ssl: {}\n :status: 400\n :response_headers:\n content-type: application/json\n x-ua-compatible: IE=Edge\n cache-control: no-cache\n x-runtime: '0.119701'\n content-length: '82'\n server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)\n date: Wed, 05 Oct 2011 14:40:10 GMT\n connection: close\n :response: *70266332040340\n on_complete_callbacks: []\n options:\n :parse: !!null \n error: !ruby/exception:OAuth2::Error\n response: *70266332040280\n code: invalid_grant\n description: invalid authorization code request\n parsed:\n error: invalid_grant\n error_description: invalid authorization code request\ncode: invalid_grant\ndescription: invalid authorization code request\n"
Я также замечаю, что не указано состояние, которое в последнем черновике (http://tools.ietf.org/html/draft-ietf-oauth-v2-22) требуется для обратного вызова. Может ли это быть проблемой?
Что касается вывода, я не получаю никаких очевидных ошибок в выводе сервера:
http://pastie.org/2644028
Теперь, еще одна вещь, на которую стоит обратить внимание, это то, что я вижу, что происходит несколько SELECT, но я никогда не вижу, чтобы какие-либо данные вставлялись в различные таблицы, особенно в коды authorization_codes, которые происходят непосредственно перед выдачей этого исключения.