Meteor.loginWithFacebook失败

时间:2016-04-05 16:13:57

标签: facebook-graph-api meteor facebook-javascript-sdk

我在尝试实现Meteor.loginWithFacebook()方法时不断收到此错误消息。登录曾经适用于我的应用程序现在它不再存在,我不知道为什么:

enter image description here

我设置好了,当点击facebook登录按钮时,调用Meteor.loginWithFacebook()方法,就像这样(客户端):

'click .facebook-login':function(event){
    Meteor.loginWithFacebook({requestPermissions:['user_photos', 'user_videos'], loginStyle:"popup"},function(err){
        if (err)
            throw new Meteor.Error(err, "Facebook Login Failed");
    });
}

服务器端:

ServiceConfiguration.configurations.upsert(
  { service: "facebook" },
  {
    $set:{
      // Development
      appId: "App-ID-String",
      secret: "App-Secret-String"
    }
  }
);

奇怪的是,这在开发中工作时工作正常,但是当我将代码推送到生产服务器时,我得到上面的错误。这段代码也工作了几个月,然后在生产中停止工作。我已经清除了两个数据库,从头开始,我仍然在生产中得到错误,但没有开发。

在您提及它之前,我有单独的代码块来处理基于开发与生产的不同appId和机密,但代码基本相同并且适用于这两种环境。

1 个答案:

答案 0 :(得分:0)

原来,Facebook SDK特别关注您的网址前缀/主机(如果您的网址前面有或没有网页),并将网址视为单独的网站。当我的网站登录时,我的网站的非www前缀URL版本无法登录到Facebook,但是' www'一个人可以。

我可以通过强制我的应用重新加载“' www”来解决这个问题。如果使用以下代码访问非www URL,则带前缀的URL。我尝试使用GoDaddy DNS界面进行转发,但它没有用。

Meteor.startup(function () {
  if (location.host.indexOf('www') === -1) {
    location = 'http://www.example.com';
  }
});

这立刻解决了我的主要问题,虽然看起来这不是最理想的处理方式,因为如果用户访问非www网址,它基本上会加载应用程序两次。