【问题标题】:Meteor - Facebook authorization simply isn't workingMeteor - Facebook 授权根本不起作用
【发布时间】:2015-03-20 17:29:51
【问题描述】:

我正在http://example.com:3000 的服务器上运行一个流星应用程序,并试图通过 Facebook 使用 accounts-facebook 对其进行授权。

我的 HTML 如下所示:

<head>
  <title>appname</title>
</head>

<body>
  <h1>Welcome to Meteor!</h1>

  {{> hello}}
</body>

<template name="hello">
  <button>Click Me</button>
  {{>loginButtons}}

  {{#if currentUser}}
    Logged in
  {{/if}}
</template>

我确实启用了 accounts-uiaccounts-facebook。我完成了 Facebook 应用程序注册过程。这是我的基本设置:

我的高级设置是默认设置,我已经切换了“你想让这个应用程序及其所有实时功能对公众开放吗?”在状态和审查中开启。

当我实际尝试使用 Facebook 登录时,授权窗口会重定向到 http://localhost:3000/_oauth/facebook?code=AQBaOoQ8XVQvzdqH8dyF03vVVP3daO9UO-tB0IZYCsYOYxL0LFWVrZUt2Rh34I2HI8Y5kofDP8sj46dn--N1pk6h0WOfoLAoaZxJzwSjocmBrRowjGv8JWcyN42msFuUdQAxQzbyrhnE2mQFUQISBOVzbnsR20ozS1pUmSdCb9BbmbidS8NvKvtEmSXm1lh9zPH7DYG4KfWQ2yIWSO8JMLEWa04TOP5rLDc75ak4WfXr1emb25T7981HUL8pCF_d_NgbFCNojoyY2yIB80e1nHxhovr-V3UWcCrNjH8aljTxy-qVGCmuLa4GravNIRfy9I8&amp;state=eyJsb2dpblN0eWxlIjoicG9wdXAiLCJjcmVkZW50aWFsVG9rZW4iOiJlUkpSQjRja0FqVmJTWklCajhvQ01IdGlVdkktNnBXcF81d0RGR3Rod1lDIn0%3D#_=_,这不是一个有效地址,因为服务器是远程运行和访问的。

另外(我想是最成问题的),页面不承认发生了任何授权,并且表现得好像登录失败了(所以我认为它已经失败了)。

谁能告诉我我做错了什么?谢谢!

【问题讨论】:

  • 我很确定这与 facebook 认为应用程序托管在 localhost 的事实有关,但是如果我将有效 OAuth 重定向 URI 更改为 example.com,授权仍会尝试转到本地主机地址,但由于该地址未列入白名单而失败。
  • 你能在你的服务器端代码的某个地方运行 console.log(process.env.ROOT_URL) 看看你的 ROOT_URL 是什么吗?
  • @WillParker http://localhost:3000/
  • @WillParker 谢谢!现在我了解了 ROOT_URL 的作用。我只需要将其更改为 example.com

标签: facebook meteor meteor-accounts


【解决方案1】:

为了让 Meteor 尝试从 Facebook 登录重定向到正确的登录页面(托管在 example.com,而不是 localhost),我需要让 Meteor 确认它正在运行在 example.com,而不是 localhost:3000 .这样做的方法是设置环境变量ROOT_URL

在 bash 上:

export ROOT_URL=http://example.com:3000

如果您在 example.com 上的 3000 端口上运行该站点,请务必将其放入您的 .profile 或等效项中,以使环境变量在会话之间保持不变。

【讨论】:

    【解决方案2】:

    检查“高级”选项卡上的重定向 URI。

    应该是这样的:http://localhost:3000/_oauth/facebook

    不是这样的:http://localhost:3000/_oauth/facebook?close

    【讨论】:

      【解决方案3】:

      让我们试试这个。

      先过一遍

      我的应用 > 测试应用

      现在右上角有一个绿色按钮create a test app

      现在出现了某种模式,Test App NameTest App Namespace,选择你想要的任何名称

      第一

      关于基本完成这2个选项

      现在在 App Domains 上选择

      localhost:3000
      

      在网站网址上。

      localhost:3000
      

      高级上,在有效 OAuth 重定向 URI 上

      http://localhost:3000/sessions/create
      

      第二

      /server/facebook-config.js for example,添加此代码。

          // first, remove configuration entry in case service is already configured
      Accounts.loginServiceConfiguration.remove({
        service: "facebook"
      });
      Accounts.loginServiceConfiguration.insert({
        service: "facebook",
        appId: "yourTestAppId",
        secret: "yourTesSecret"
      });
      

      它应该可以工作

      【讨论】:

      • 当我尝试将 localhost:3000 添加到应用程序域时,它说不允许使用顶级域。如果我没有将 App Domain 放入(站点 URL 为 localhost:3000),我会在尝试登录时得到Given URL is not allowed by the Application configuration.: One or more of the given URLs is not allowed by the App's settings. It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains.
      • 但是你从test app更改了Secret和App id?
      • 是的。我能够将 App Domains 更改为 http://localhost:3000 而不是 localhost:3000,但这也没有改变任何东西。
      【解决方案4】:

      @RiverTam 的回答为我做到了!我在 localhost 上使用 SSLProxy 进行了自签名 SSL 证书,我错误地认为您可以将自定义路由添加到回调 URL,所以我必须做几件事:

      1。在meteor run命令中,在meteor run之前先导出ROOT_URL

      export ROOT_URL=https://localhost:3100; meteor --settings settings-development.json --port 3100
      

      2。添加FB想要的回调url,带localhost域

      导航到FB App in developer.facebook.com =&gt; Facebook Login =&gt; Settings =&gt; Client OAuth Settings 并像这样添加 URL:

      3。将域留空

      这是FB App in developer.facebook.com =&gt; Settings =&gt; Advanced =&gt; Domain Manager下的

      +999999 到 River Tam 以获取 FireFly 参考:P

      【讨论】:

        猜你喜欢
        • 2016-11-20
        • 1970-01-01
        • 2012-04-24
        • 2015-08-09
        • 2018-02-04
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        • 2017-06-25
        相关资源
        最近更新 更多