我正在做我的第二个Facebook连接网站。在我的第一个网站上,我使用facebook coonect FBML对用户进行签名,然后我可以通过PHP客户端访问其他信息。使用此网站,使用相同的确切代码,它似乎没有工作。我希望有人能够使用Facebook按钮登录:
<fb:login-button length="long" size="medium" onlogin="facebook_onlogin();"></fb:login-button>
登录后,facebook_onlogin()函数向PHP页面发出一些AJAX请求,试图使用Facebook PHP客户端。这是该页面的代码:
$facebook = new Facebook('xxxxx API KEY xxxxx', 'xxxxx SECRET KEY xxxxx');
//$facebook->require_login(); ** I DONT WANT THIS LINE!!
$userID = $facebook->api_client->users_getLoggedInUser();
if($userID) {
$user_details = $facebook->api_client->users_getInfo($userID, 'last_name, first_name');
$firstName = $user_details[0]['first_name'];
$lastName = $user_details[0]['last_name'];
$this->view->userID = $userID;
$this->view->firstName = $firstName;
$this->view->lastName = $lastName;
}
问题是PHP客户端认为我没有会话密钥,所以$ userID永远不会被设置。如果我用我的Facebook ID(我登录时)覆盖$ userID,我会收到此错误:
异常'FacebookRestClientException',在C:\ wamp \ www \ mab \ application \ Facebook \ facebookapi_php5_restlib.php:3003
中显示消息'调用此方法需要会话密钥'如果我取消注释require_login(),它将获得一个会话ID,但它会重定向很多页面并破坏我的AJAX调用。我使用的代码与我在另一个网站上成功完成的代码相同。在用户使用连接按钮登录后,任何人都有任何想法为什么PHP客户端不知道会话ID?任何想法将不胜感激。谢谢!
答案 0 :(得分:0)
您可以使用以下命令直接从Cookie中提取没有API调用的用户ID:
$facebook->get_loggedin_user();
请注意,这是在主$facebook
对象上,不是它包含的api_client
对象。
答案 1 :(得分:0)
永远不要尝试使用facebook connect和来自localhost的PHP客户端....这就是答案。您可以使其工作,但它会导致您在公共领域工作时无需处理的几个“隐藏”问题。