【问题标题】:Facebook SDK v5 Graph returned an error: Invalid OAuth access tokenFacebook SDK v5 Graph 返回错误:无效的 OAuth 访问令牌
【发布时间】:2016-11-15 12:26:30
【问题描述】:

免责声明:我对 php 编码比较陌生,对 Facebook SDK 也很陌生。

我一直在尝试通过他们的在线资料和示例来学习 Facebook API,但发现它们相当缺乏。我正在尝试做一些非常基本的事情 - 只需使用 Facebook 登录并检索一些用户值。

按照 Facebook 的示例,我的 login.php 如下所示:

<?php
session_start();

require_once __DIR__ . '/../_fb/autoload.php';

$fb = new Facebook\Facebook([
'app_id' => '26777overwritten335',
'app_secret' => '8260906deoverwrittenf286510',
'default_graph_version' => 'v2.6',
]);

$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_likes']; // optional
$loginUrl = $helper->getLoginUrl('http://www.domain.com/_mdp/fb_dev/login-callback.php', $permissions);

echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
?>

...这似乎工作正常。

在 login-callback.php 页面我有以下内容:

    <?php
session_start();

require_once __DIR__ . '/../_fb/autoload.php';

$fb = new Facebook\Facebook([
    'app_id' => '267772overwritten335',
    'app_secret' => '8260906de2overwritten1f286510',
    'default_graph_version' => 'v2.6',
]);

$helper = $fb->getRedirectLoginHelper();
try {
    $accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
    // When Graph returns an error
    echo 'Graph returned an error: ' . $e->getMessage();
    exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
    // When validation fails or other local issues
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
    exit;
}

if (isset($accessToken)) {
    // Logged in!
    $_SESSION['facebook_access_token'] = (string) $accessToken;
    echo 'You are now logged in!';
    echo '<br> the access token is: ' . $accessToken . '<br>';

    // Now you can redirect to another page and use the
    // access token from $_SESSION['facebook_access_token']
}
// Am Successfully Logged In Here

try {
  // Returns a `Facebook\FacebookResponse` object
  $response = $fb->get('/me?fields=id,name', '$accessToken');
} catch(Facebook\Exceptions\FacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

$user = $response->getGraphUser();

echo 'Name: ' . $user['name'];
// OR
// echo 'Name: ' . $user->getName();
?>

当我从线路得到回声时,我似乎确实能够成功登录:

echo 'You are now logged in!';

我尝试了很多不同的代码示例并得到了各种错误,但上面的代码导致回显以下内容:

Graph returned an error: Invalid OAuth access token.

我已经用谷歌搜索了我能想到的所有方法,但还没有发现我做错了什么。

如果有人能告诉我我在哪里遗漏了什么,并希望能给我一些更正的代码行,我将不胜感激。

另外,仅供参考 - 我真的很想将图形版本 2.6 与 SDK 5 一起使用,因为它似乎有一些可用的边在最近的版本中没有。

非常感谢您为我指明正确方向的任何帮助。

【问题讨论】:

    标签: php facebook facebook-graph-api oauth


    【解决方案1】:
    try {
      // Returns a `Facebook\FacebookResponse` object
      $response = $fb->get('/me?fields=id,name', '$accessToken');
    

    您在此处传递 literal$accessToken - 这当然不是有效的访问令牌。

    PHP 不解析带单引号的字符串中的变量。在这方面请阅读http://php.net/manual/en/language.types.string.php,这是您需要的基本知识。

    然后,完全停止将简单变量放入字符串中。

    try {
      // Returns a `Facebook\FacebookResponse` object
      $response = $fb->get('/me?fields=id,name', $accessToken);
    

    【讨论】:

    • 啊哈!这样可行。那真是个愚蠢的错误。 Facebook 提供的样本有... $response = $fb->get('/me?fields=id,name', '[AccessToken]'); ...所以显然我没有认识到我需要从示例中删除单引号。非常感谢 - 我昨天花了几个小时试图让它发挥作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2011-11-06
    • 1970-01-01
    • 2021-01-13
    相关资源
    最近更新 更多