我已經在Ruby中使用Faraday實現了我自己的類,以通過OAuth處理授權給GitHub。我驗證過下列條件:GitHub OAuth授權請求不會重定向到授權應用程序頁面
- 沒有登錄到GitHub的
- 沒有令牌存在應用
是通過GET
授權請求"/login/oauth/authorize"
用隨機變量state
:
- 重定向到GitHub的登錄頁面
- 重定向到授權應用程序頁面登錄後
- 授權
- 會迴應的access_token後執行回調到我的臨時代碼的應用程序時,我
POST
到"/login/oauth/access_token"
臨時代碼
我的問題是,當我改變第一個條件,我還沒有登錄到GitHub。相同的GET請求被髮送到GitHub,我看到正確的URL和正確的參數。然後我看到GitHub的參數return_to
似乎是正確的重定向,但它很快就會重新導向回到GitHub主頁。
我希望這很容易就像忘記頭部參數或其他東西,有人可能馬上發現問題。無論如何,任何幫助表示讚賞...
代碼設置法拉第連接:
def connection
@connection ||= Faraday.new(url: 'https://github.com') do |faraday|
faraday.request :url_encoded
faraday.response :logger
faraday.adapter Faraday.default_adapter
end
end
代碼發送的授權請求:
def request_authorization(client_id, redirect_uri, redirect_id, scope, expected_state)
response = connection.get '/login/oauth/authorize', {
client_id: client_id,
redirect_uri: "#{redirect_uri}?id=#{redirect_id}",
scope: scope,
state: expected_state
}
if response.status == 302
response.headers[:location]
else
nil
end
end
我沒有顯示的代碼,但我的控制器重定向到來自request_authorization()
的URL回覆。同樣,在這兩種情況下,我都能看到來自控制器的重定向,但第二種情況似乎遇到了GitHub在重定向請求中不喜歡的東西。我假設它然後重定向到主頁,並且從不回覆我的應用程序,因爲我的原始請求中存在未知問題。
謝謝, 大衛
嘿大衛!你能用curl -v調用重現這個問題嗎?如果是這樣,請將這些詳細信息發送到[email protected],以便我們可以查看。 –
非常有趣......經過更多的curl和RequestBin調試後,我發現GitHub主頁確實包含一個實際沒有顯示的錯誤。在HTML主體的末尾有一個ajax-error-message div,它表示「請求出錯了,請重試。」我將總結所有調試信息併發送給GitHub支持。一旦完成解決,我也會在這裏更新結果。 – dmulter