javascript - 将访问 token 从 Facebook JS sdk 传递到 PHP session 或 cookie

标签 javascript php facebook facebook-graph-api cookies

我正在使用这个 Facebook 示例:Getting Access Token From The JavaScript SDK Example

我能够用 JS 正确获取 Facebook 登录部分。 但我想从 PHP 获取用户 ID 和访问 token 以用于服务器端操作,例如添加、删除等。

这是我的 JS 部分,运行良好:

  function fb_login() {
    FB.login(function(response) {
        if (response.authResponse) {
            $.post("actions.php?js-login").done(function(data){
                console.log(data);
            });         
            init_app();
        } else {
        alert('User cancelled login or did not fully authorize.');
        }
    });
  }

这是 PHP 端,它似乎无法识别 JS 应该传输的 cookie 或 session :

if (isset($_GET['js-login'])) {

$helper = $fb->getJavaScriptHelper();

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)) {
  echo 'No cookie set or no OAuth data could be obtained from cookie.';
  exit;
}

// Logged in
echo '<h3>Access Token</h3>';
var_dump($accessToken->getValue());

$_SESSION['fb_access_token'] = (string) $accessToken;
exit;

}

我明白

No cookie set or no OAuth data could be obtained from cookie.

消息,但用户已通过JS登录。

最佳答案

您需要确保使用

初始化 JavaScript SDK
{cookie: true}

选项集。例如:

window.fbAsyncInit = function() {
  FB.init({
    appId: 'your-app-id',
    cookie: true, // This is important, it's not enabled by default
    version: 'v2.2'
  });
};

如果您不设置此选项,则不会设置 Facebook cookie,并且 PHP SDK 将无法从 cookie 中存在的签名请求中获取访问 token 。

引用:https://developers.facebook.com/docs/php/howto/example_access_token_from_javascript

关于javascript - 将访问 token 从 Facebook JS sdk 传递到 PHP session 或 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35259967/

相关文章:

ios - 在 iOS 上放大 ImageView

javascript - 如何在不拖动的情况下触发 drag()

javascript - facebook风格的菜单实现

php - 如何在 Symfony2/Doctrine2 中处理大量 INSERT 以避免 "Allowed memory size of 2147483648 bytes exhausted"

php - Rackspace cloudfiles PHP API 创建容器而不是对象。每次都有不同的错误?

ios - 从 iPhone 应用程序创建 Facebook 民意调查

JavaScript 从 URL 中删除//

asp.net - 母版页 Asp.net 上的回发事件之前的验证

php - 在 php-amqplib 中使用确认(发布者确认)

facebook - NodeJS 确认 Facebook 凭据