簡體   English   中英

OmniAuth OAuth 1策略,用於更新API錯誤

[英]OmniAuth OAuth 1 strategy for upwork API error

我正在使用OmniAuth gem以及用於FB,Linkedin和G +的特定提供程序gem,用於登錄,注冊和信息檢索。 在這種情況下,我想通過使用OAuth 1的Upwork api與其他API進行進一步集成。

我已經用Upwork設置了應用程序,並具有工作密鑰和秘密。 我已經設置了加載器來加載我的自定義策略(因為它不是寶石)並且可以加載。 我設置了提供程序以傳遞存儲在env文件中的密鑰和機密。

經過許多小時,所有這些似乎現在都在起作用。 我嘗試閱讀了OmniAuth策略指南中包含的稀疏信息以及OAuth Wiki,並調查了其他提供程序的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)

根據文檔,這似乎是當我嘗試將GET僅用於POST或將POST應用於僅GET端點時的情況。

在Upwork的API參考中,他們明確地說:

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是從我發現的gem和來自另一個的JSON.load中剝離出來的。 我認為這僅適用於這兩個,但似乎無效。 我正在慢慢學習如何使用所有這些,並想先建立一個可用的策略,然后將其作為omniauth的公共工具提供。

UpWork有一個API文檔,甚至有一個供ruby使用的寶石,但我想對所有內容使用OmniAuth,此外,我將來需要弄清楚其他API,所以我想知道如何做到這一點。

https://developers.upwork.com/?lang=ruby#authentication_oauth-10

有人可以幫忙嗎? 或通過創建用於Upwork的OmniAuth gem。 謝謝!

(已編輯以更改錯誤-現在輸出的內容要薄得多,但它是相同的錯誤)

request_phase方法實際上是屬於omniauth-oauth的方法,您需要在upwork.rb之上,並且您的類Upwork繼承它( OmniAuth::Strategies::OAuth )。 您不必覆蓋它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM