2015-07-28 4 views
0

Я использую драгоценный камень 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. Спасибо!

(отредактированный изменить ошибку - теперь это гораздо тоньше выход, но это та же ошибка)

+0

Итак, ошибка теперь немного отличается, поскольку, по-моему, мой JSON.load также был неправильно установлен. –

ответ

0

Метод request_phase на самом деле метод, который принадлежит к omniauth-oauth, который вам требуется на вершине upwork.rb и ваш класс Upwork наследуется это (OmniAuth::Strategies::OAuth). вам не нужно переопределять его.

+0

Спасибо Махмуд. Я понял это, как только вы дали мне gem-файл ах ах. Я также сделал ошибку, анализируя JSON, теперь я понимаю, откуда я должен ее получить. Что касается электронной почты, я связался с командой api, и они говорят, что невозможно получить через API. Теперь я пишу новую часть для платформы и в скором времени займусь поиском обратной связи (поскольку она находится в области общего профиля).Я просто направляюсь к обратным вызовам и использую auth для извлечения и сохранения дополнительной информации, которая мне нужна, при запуске другого действия, чем при аутентификации. Спасибо огромное! –

+0

На самом деле мне нужно использовать GDS вместо простых запросов API, но, похоже, это похоже на язык SQL ... Спасибо еще раз –

 Смежные вопросы

  • Нет связанных вопросов^_^