1

因此,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:必须使用活动访问令牌来查询有关当前用户的信息。在第560行扔进/home/woohoobi/public_html/facebookv2/inc/facebook.php

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

4

3 回答 3

5

当你这样做

$user = $facebook->getUser();

不为$usernull 并不意味着您有有效的访问令牌来进行某些 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 ?>

对于完整的流程,您可以查看有据可查的 Facebook PHP SDK 示例。

希望有帮助。

于 2011-05-27T10:04:55.330 回答
2

这帮助了我..很多!所以..用户只需要首先接受您的应用程序即可使用用户数据。

<body>
<?php

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

?>
于 2012-05-28T11:30:55.267 回答
1

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

于 2011-10-22T18:27:13.230 回答