我在尝试实现Meteor.loginWithFacebook()方法时不断收到此错误消息。登录曾经适用于我的应用程序现在它不再存在,我不知道为什么:
我设置好了,当点击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和机密,但代码基本相同并且适用于这两种环境。
答案 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网址,它基本上会加载应用程序两次。