现在我如何在Facebook的PHP SDK 3.0.0中进行身份验证?

时间:2011-05-27 09:21:58

标签: php facebook facebook-graph-api facebook-php-sdk

所以Facebook已经改变了身份验证过程。再次。 PHP SDK中的示例是:

$user = $facebook->getUser();

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

但是,现在我们如何验证尚未经过身份验证的用户?我们只是创建一个else语句并调用$facebook->getLoginUrl()的结果吗?

此外,上面的示例给出了一个错误,因为对$facebook->getUser()的调用会返回我的用户ID,但是当我尝试拨打$facebook->api('/me')时出现错误,我的应用就会失败:

  

致命错误:未捕获OAuthException:必须使用活动访问令牌来查询有关当前用户的信息。在 /home/woohoobi/public_html/facebookv2/inc/facebook.php 投放 560

有关如何验证未经身份验证的用户的任何帮助都会很棒。

3 个答案:

答案 0 :(得分:5)

当你这样做时

$user = $facebook->getUser();

使$user不为空并不意味着您有一个有效的访问令牌来进行一些API调用。它只是意味着用户已登录。

要检查您是否拥有有效的访问令牌,一种方法是尝试进行API调用,就像您在问题中所写的代码一样:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

if ($user) {
  // The user is logged in
  try {
    $user_profile = $facebook->api('/me');
    // Here : API call succeeded, you have a valid access token
  } catch (FacebookApiException $e) {
    // Here : API call failed, you don't have a valid access token
    // you have to send him to $facebook->getLoginUrl()
    $user = null;
  }
} // else : the user is not logged in

因此,您有2个案例需要将您的用户发送到$facebook->getLoginUrl(),在这两种情况下,我们都会$user == null。所以我们只需添加:

<?php if ($user): ?>
    <a href="<?php echo $facebook->getLogoutUrl() ?>">Logout of Facebook</a>
<?php else: ?>
    <a href="<?php echo $facebook->getLoginUrl() ?>">Login with Facebook</a>
<?php endif ?>

对于完整的流程,您可以看到the example of the Facebook PHP SDK,其中有详细记录。

希望有所帮助。

答案 1 :(得分:2)

这帮了我很多!所以..用户只需要先接受你的应用程序即可使用userdata。

<body>
<?php

  if (!$user_id)
    echo("<script> top.location.href='" . $facebook->getLoginUrl() . "'</script>");

?>

答案 2 :(得分:1)

我遇到了同样的问题,getUser()调用返回0.有一天它正在工作,下一个它没有。我没有意识到PHP SDK旨在与JS SDK一起使用。您应该按照以下说明操作:https://developers.facebook.com/docs/reference/javascript/ - 在之后包含配置,您应该进行排序。