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

Mar*_*ean 1 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Que*_*tin 5

当你这样做

$user = $facebook->getUser();
Run Code Online (Sandbox Code Playgroud)

$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
Run Code Online (Sandbox Code Playgroud)

因此,您有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 ?>
Run Code Online (Sandbox Code Playgroud)

对于完整的流程,您可以看到Facebook PHP SDK的示例,该示例已有详细记录.

希望有所帮助.