【发布时间】:2017-05-31 20:16:03
【问题描述】:
我正在尝试设置手动 oauth 流程以通过 facebook 登录我的用户,这是相当标准的票价。
我的重定向工作正常,并将代码发送到我的回调函数。然后我必须用我的代码交换我的 access_token 与 facebook。如果它不完全超时,则需要 60 多秒。我之前已经多次完成了完全相同的功能并且没有遇到任何问题。其他网站会立即响应,而 facebook 出于某种原因需要 60 多秒。请记住,在我的生产服务器的 rails 控制台中运行的相同代码可以立即运行。如果我通过 curl 做一个等效的请求,它也可以立即工作。这个问题只发生在我本地机器上的 Rails 控制台中。我用 RestClient 和 HTTParty 进行了测试,得到了相同的结果。
url = "https://graph.facebook.com/v2.8/oauth/access_token?client_id=#{CLIENT_ID}&redirect_uri=http://127.0.0.1:3000/facebook_oauth_redirect&client_secret=#{CLIENT_SECRET}&code={#CODE}"
response = RestClient.get(url, :content_type => 'application/json', :accept => :json)
我不知道出了什么问题。我怀疑可能与 SSL 有关,但我可以毫无问题地从其他 https 站点获得响应。我把它归结为 TCPSocket 本身需要 60 多秒才能打开。
s = TCPSocket.new 'graph.facebook.com', 443
这大约需要 75 秒才能打开,而其他网站只需要一小部分时间。我的同事确认他可以立即打开 TCPSocket。我现在完全没有想法,所以欢迎任何建议。
编辑:似乎问题可能是我几周前买的新无线路由器。我将我的 Mac 连接到我的 iPhone 热点,它立即工作。
【问题讨论】:
-
您的
url末尾有一个随机的}。这是一个错误吗?CLIENT_SECRET和CODE没有插值在那里。你在其他机器上试过吗?也许你被扼杀了。也许您的 Ruby 安装已损坏,升级 Ruby 会有所帮助。 -
对不起,在我急于审查其中一些值时,我只是用常量替换了它们。也许我会尝试不同版本的 ruby,我不认为我被限制考虑我每 5 分钟请求一次,如果那样的话。此外,它还适用于 curl。
-
更改 ruby 的版本并没有解决任何问题,只是更新。
-
与其他事物的正常 HTTP 连接是否可以快速工作? HTTPS 怎么样?
-
这很奇怪。与其他站点的 HTTP 连接和 HTTPS 连接没有问题,只有 graph.facebook api 并且仅在 rails 控制台中。如果我将 get 请求放在浏览器中或 curl 中它可以工作,请使用 RestClient 或 HTTParty 并且它会失败。不管我重置我的无线路由器,重启一两次,然后欺骗我的 MAC 地址。这似乎解决了问题。
标签: ruby-on-rails ruby facebook facebook-graph-api oauth