为什么 Facebook oauth 会尝试访问 https 站点的 http 版本?

Why would Facebook oauth try to access the http version of an https site?

当我尝试在该网站上使用 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 中,弹出窗口变为空白但保持打开状态。弹窗URL是

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

弹出式控制台显示:

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

错误发生在第23行:

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

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

{"line":"398","file":"oauth_server.js","message":"Error in OAuth Server: redirectUrl (http://parlay.io/) is not on the same host as the app (https://parlay.io/)","time":{"$date ":1435164688847},"level":"warn"}[parlay.io]

我被重定向到同一个登录页面。我第二次单击登录时,它起作用了。第二次点击可以自动执行:

我遇到了完全相同的问题,在类似的条件下(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