我在这里撕扯我的头发。
我们有一个网络应用程序托管在一堆不同的域上,我们在页面上有一个facebook登录。这很有效。他们中的大多数运行我们的根域,例如newsite.ourplatform.com,我们重复使用相同的Facebook应用程序并添加新域名。
我们已经请求在不同的网址上设置新网站。在过去,这并不是一个真正的问题。我们设置了一个新的Facebook应用程序,将appid添加到配置和voila,facebook登录工作。 (我们不经常这样做,所以我可能会破坏它)
这一次。我已经设置了一个新的应用程序ID并将其插入,但每当我打电话给facebook登录时,它都会对我进行身份验证,但是我得到了facebook的无用回复。
例如。在工作现场,我打电话
FB.api("/me/", function(response){console.log(JSON.stringify(response));});
并获得回复
"{id":"12345678910","email":"my@email.com","first_name":"My Name","gender":"male","last_name":"Myname","link":"https://www.facebook.com/app_scoped_user_id/12345678910/","locale":"en_GB","name":"My Name","timezone":10,"updated_time":"2014-01-19T10:44:20+0000","verified":true}
但是在破碎的网站上我会做同样的电话并得到回复
{"name":"MyName","id":"12345678910"}
这有点好,但我需要他们的电子邮件。据我所知,除了电子邮件,public_profile和user_friends之外,我不会要求任何权限 由于应用程序设置的工作方式,我们有不同的应用程序运行2.1,2.2和2.4,这个新的2.4版本不起作用。我不确定这是不是一个红鲱鱼,或者我是否有一个配置错误的Facebook应用程序。
(编辑 - 删除受影响的网站以保护无辜者)
答案 0 :(得分:1)
正如@CBroe所说,你真的需要查看API的v2.4 changelog。在Facebook的2.4版本中引入了声明性字段'。这意味着当您提出基本请求时,例如/me
,您只会获得少量信息,例如'名称'并且' id'。
您有两种方法可以获得更多字段:
选项一
FB.api('/me?fields=first_name,last_name,gender', function(response) {
console.log(response)
});
选项二
FB.api('/me', function(response) {
console.log(response)
}, {'fields': 'first_name, last_name, gender'})
这将返回如下所示的响应:
{"first_name":"First", "last_name":"Last", "gender":"gender", "id":"ID"}
上述请求中的密钥是在您的请求中指定fields
网址参数,并在@CBroe链接中记录,我已在上面链接过。