Facebook登录 - 我到底做错了什么

时间:2015-08-04 01:24:44

标签: facebook facebook-graph-api

我在这里撕扯我的头发。

我们有一个网络应用程序托管在一堆不同的域上,我们在页面上有一个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应用程序。

(编辑 - 删除受影响的网站以保护无辜者)

1 个答案:

答案 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链接中记录,我已在上面链接过。