Facebook Connect - 同时使用 FBML 和 PHP 客户端
Posted
技术标签:
【中文标题】Facebook Connect - 同时使用 FBML 和 PHP 客户端【英文标题】:Facebook Connect - Using both FBML and PHP Client 【发布时间】:2009-10-15 18:22:47 【问题描述】:我正在做我的第二个 Facebook 连接网站。在我的第一个站点上,我使用 facebook coonect FBML 登录用户,然后我可以通过 php 客户端访问其他信息。对于这个站点,使用相同的确切代码,它似乎不起作用。我希望有人能够使用 Facebook 按钮登录:
<fb:login-button length="long" size="medium" onlogin="facebook_onlogin();"></fb:login-button>
在他们登录后,facebook_onlogin() 函数向试图使用 Facebook PHP 客户端的 PHP 页面发出一些 AJAX 请求。这是该页面的代码:
$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?任何想法将不胜感激。谢谢!
【问题讨论】:
【参考方案1】:您可以使用以下方法直接从 cookie 中提取用户 ID,而无需 API 调用:
$facebook->get_loggedin_user();
请注意,这是在主 $facebook
对象上,不是它包含的 api_client
对象。
【讨论】:
嘿,除非我调用 $facebook->require_login();功能。我可以调用其他一些函数来为 PHP 客户端设置会话 ID 吗? 或者有没有办法从 PHP 中获取用户的信息(名字、姓氏等)? 确保您拥有一组有效的 Facebook cookie,当您使用按钮登录时,它们应该由 facebook connect JS 库创建。如果用户没有通过 Connect 登录,您将不会从 get_loggedin_user() 中得到任何信息 [因为没有人登录]。不,如果没有 API 调用,您将无法获得名字/姓氏等;只有用户 ID。【参考方案2】:永远不要尝试从 localhost 使用 facebook connect 和 PHP 客户端......这就是答案。你可以让它工作,但它会导致一些“隐藏”的问题,当你在公共领域工作时,你不必处理这些问题。
【讨论】:
以上是关于Facebook Connect - 同时使用 FBML 和 PHP 客户端的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iframe facebook 应用程序中使用 FB.Connect.streamPublish?
使用 facebook connect 登录 IOS 应用程序时出现冲突错误
使用 PassportJS 和 Connect for NodeJS 来验证 Facebook 用户