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在移动网站上扩展页面宽度

使用 facebook connect 登录 IOS 应用程序时出现冲突错误

使用 PassportJS 和 Connect for NodeJS 来验证 Facebook 用户

iOS Phonegap Like 按钮 (phonegap-plugin-facebook-connect)

使用 facebook connect 登录后应用程序崩溃