【问题标题】:Why would Facebook oauth try to access the http version of an https site?为什么 Facebook oauth 会尝试访问 https 网站的 http 版本?
【发布时间】:2015-06-24 01:47:37
【问题描述】:

当我尝试在这个网站上使用 Facebook 登录时:

https://parlay.io

点击页面顶部的按钮,我会弹出一个带有 URL 的窗口:

https://www.facebook.com/login.php?skip_api_login=1&api_key=501604519940587&signed_next=1&next=https://www.facebook.com/v2.2/dialog/oauth?redirect_uri=https%3A%2F%2Fparlay.io%2F_oauth%2Ffacebook%3Fclose&display=popup&state=eyJsb2dpblN0eWxlIjoicG9wdXAiLCJjcmVkZW50aWFsVG9rZW4iOiJxd01acHRSb3hGX0hDM1FEV25vSVVSVXlDZTZWcWVFNUhrUHZVcHA5ZWhUIiwiaXNDb3Jkb3ZhIjpmYWxzZX0%3D&scope=email%2Cuser_friends&client_id=501604519940587&ret=login&cancel_url=https://parlay.io/_oauth/facebook?close&error=access_denied&error_code=200&error_description=Permissions+error&error_reason=user_denied&state=eyJsb2dpblN0eWxlIjoicG9wdXAiLCJjcmVkZW50aWFsVG9rZW4iOiJxd01acHRSb3hGX0hDM1FEV25vSVVSVXlDZTZWcWVFNUhrUHZVcHA5ZWhUIiwiaXNDb3Jkb3ZhIjpmYWxzZX0%3D#=&display=popup

我输入我的 Facebook 信用并提交。在 Safari 中,这有效并且登录完成。在 Chrome 中,弹出窗口变为空白但保持打开状态。弹出网址是

https://parlay.io/_oauth/facebook?close&code=...

弹出控制台说:

未捕获的安全错误:阻止了来源为“https://parlay.io”的框架访问来源为“http://parlay.io”的框架。请求访问的帧具有“https”协议,被访问的帧具有“http”协议。协议必须匹配。

错误发生在第23行:

我不知道为什么这个弹出窗口试图访问http://parlay.io。我的应用程序中的任何位置都没有 http 或 http://parlay.io 作为设置。

这是使用 'popup' 样式的 oauth。当我在 Chrome 中切换到“重定向”样式时,第一次登录时,我在服务器上收到此错误:

{"line":"398","file":"oauth_server.js","message":"OAuth 服务器出错:redirectUrl (http://parlay.io/) 与应用不在同一主机上 (@987654327 @)","time":{"$date":1435164688847},"level":"warn"}[parlay.io]

然后我被重定向到同一个登录页面。我第二次单击登录时,它可以工作。第二次点击可以通过以下方式自动完成:

【问题讨论】:

  • facebook端的应用设置怎么样?你那里可以有一个http吗?
  • @Loren 也许,最初您将 ROOT_URL 设置为使用 http://。如果 facebook 也使用 https:// url 进行回调,您的缓存中可能会有一些内容。尝试在隐私模式下使用隐身 chrome 窗口或 Safari 来测试它
  • 嘿,斗篷和tail.sh!小世界。谢谢大家,developer.facebook.com 上的 facebook 应用程序设置中的所有 URL 都是 https。 Chrome 隐身模式中的相同行为。登录在 Safari 中有效,没有 SecurityError

标签: meteor facebook-login meteor-accounts


【解决方案1】:

在类似的条件下,我遇到了完全相同的问题(Meteor 1.3.x,ROOT_URL 设置为 https,FB/Twitter 应用程序设置为 https。)

为我解决问题的方法是将我的网站设置为始终将 HTTP 请求重定向到 HTTPS。我正在使用 Cloudflare,所以我按照此处的说明进行操作:

https://support.cloudflare.com/hc/en-us/articles/200170536-How-do-I-redirect-all-visitors-to-HTTPS-SSL-

进行更改后,登录就像在不同机器上的魅力一样。最终结果在这里:

https://goodbyegunstocks.com

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 2012-07-31
    相关资源
    最近更新 更多