我已经在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