Я использую драгоценный камень OmniAuth вместе со специфическими драгоценными камнями поставщика для FB, Linkedin и G +, как для входа, регистрации, так и для извлечения информации. Я хочу предложить дополнительную интеграцию с другими API в этом случае с api Upwork, который использует OAuth 1.OmniAuth OAuth 1 стратегия ошибки upwork API
Я установил приложение с Upwork и имею рабочий ключ и секрет. Я установил загрузчик для загрузки моей собственной стратегии (поскольку это не драгоценный камень), и он загружается. Я установил, чтобы провайдер передавал ключ и секрет, которые хранятся в файле env.
Все это, кажется, работает сейчас, после многих часов в него. Я попытался прочесть редкую информацию, содержащуюся в руководстве по стратегии OmniAuth, вместе с вики OAuth и заглянул в файлы gem других поставщиков. Я в конечном итоге копировал немного кода, который, как я думал, будет достаточно, чтобы работать через это, по крайней мере, для входа в систему, но я что-то путаю.
Всякий раз, когда я перехожу на обратный путь для работы, автоматически устанавливаю omniauth, я получаю сообщение об ошибке.
Started GET "/auth/upwork" for ::1 at 2015-07-29 00:08:12 +0800
ActiveRecord::SchemaMigration Load (0.3ms) SELECT "schema_migrations".* FROM "schema_migrations"
I, [2015-07-29T00:08:12.169605 #24517] INFO -- omniauth: (upwork) Request phase initiated.
OAuth::Unauthorized (405 Method Not Allowed):
lib/omniauth/strategies/upwork.rb:18:in `request_phase'
Rendered /Users/mnussbaumer/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-4.2.1/lib/action_dispatch/middleware/templates/rescues/_source.erb (5.1ms)
По документации это, кажется, когда я либо попробовать добраться до только POST или POST на GET только конечную точку.
В справочнике API Upwork в них явно говорят, что:
Get request token
Endpoint
POST /api/auth/v1/oauth/token/request
Моя стратегия в настоящее время, как это:
require 'json'
require 'omniauth-oauth'
module OmniAuth
module Strategies
class Upwork < OmniAuth::Strategies::OAuth
option :client_options, {
:site => "https://www.upwork.com/api",
:request_token_path => "/api/auth/v1/oauth/token/request",
:authorize_url => "/services/api/auth",
:access_token_path => "api/auth/v1/oauth/token/access",
}
uid { request.params['user_id'] }
def request_phase
request_token = consumer.get_request_token(:oauth_callback => callback_url)
session['oauth'] ||= {}
session['oauth'][name.to_s] = {'callback_confirmed' => request_token.callback_confirmed?, 'request_token' => request_token.token, 'request_secret' => request_token.secret}
if request_token.callback_confirmed?
redirect request_token.authorize_url(options[:authorize_params].merge(:oauth_consumer_key => consumer.key))
else
redirect request_token.authorize_url(options[:authorize_params].merge(:oauth_callback => callback_url, :oauth_consumer_key => consumer.key))
end
rescue ::Timeout::Error => e
fail!(:timeout, e)
rescue ::Net::HTTPFatalError, ::OpenSSL::SSL::SSLError => e
fail!(:service_unavailable, e)
end
def raw_info
@raw_info ||= JSON.load(access_token.get('/me.json')).body
end
end
end
end
Я попытался изменить "consumer.get_request_token" на "consumer.post_request_token", но я думайте, что не имеет к этому никакого отношения.
Request_phase был сорван с драгоценного камня, который я нашел, и JSON.load от другого. Я думал, что это сработает только с этими 2, но, похоже, это не так. Я медленно изучаю, как использовать все это, и хотел бы построить первую полезную стратегию, а затем предоставить ее как публичный камень для omniauth.
UpWork имеет документацию по API, и у них даже есть жемчужина для ruby, но я бы хотел использовать OmniAuth для всего, плюс, мне нужно будет выяснить другие API в будущем, поэтому я хотел бы знать, как чтобы сделать это хорошо.
https://developers.upwork.com/?lang=ruby#authentication_oauth-10
Кто-нибудь может помочь с этим? Или с созданием драгоценного камня OmniAuth для Upwork. Спасибо!
(отредактированный изменить ошибку - теперь это гораздо тоньше выход, но это та же ошибка)
Итак, ошибка теперь немного отличается, поскольку, по-моему, мой JSON.load также был неправильно установлен. –