OmniAuth(Facebook和LinkedIn)为我工作了几个月。
在没有任何代码更改的情况下,我开始看到来自 Facebook/LinkedIn 的回调延迟很长时间。
现在大约需要 40 秒:
Started GET "/auth/facebook/callback?state=e600c4acbb0e10f40....
自:
Processing by AuthenticationsController#create as HTML....
我看到了一个问题,但没有解决方案对我有用。
有人看到吗?我该如何解决这个问题/弄清楚发生了什么?
--编辑1--
我用curl运行了流程,发现调用Facebook需要很长时间:
time curl --data "grant_type=authorization_code&client_id=[MY CLINET ID]&client_secret=[MY CLIENT SECRET]&redirect_uri=[MY REDIRECT URI]&code=[THE CODE I GOT]" https://graph.facebook.com/oauth/access_token
>> access_token=AAAA....ZDZD&expires=5183693
real 0m20.459s
user 0m0.004s
sys 0m0.008s
time curl -H "Authorization: Bearer AAAA....ZDZD" https://graph.facebook.com/me
>> {....}
real 0m20.706s
user 0m0.012s
sys 0m0.008s
--编辑2--
似乎每次使用 curl 的调用都比应有的多花费 20 秒。我尝试过谷歌:
time curl http://www.google.com
>> <HTML>....</HTML>
real 0m20.253s
user 0m0.012s
sys 0m0.004s
但是当我尝试使用 IP 时:
time curl http://173.194.44.17
>> <HTML>....</HTML>
real 0m0.647s
user 0m0.012s
sys 0m0.000s
我在某个网站上发现了一个提示,它可能与缓慢的DNS解析有关。同一台计算机上的浏览器似乎工作正常。
有什么想法吗?
我找到了解决方案。这是一个本地问题,与 Ubuntu 12.04 中的 DNS 解析缓慢有关,这是一个已知问题。为我解决的是将我的系统配置为使用谷歌 DNS 而不是自动配置。