繁体   English   中英

将访问令牌从Facebook JS SDK传递到PHP会话或Cookie

[英]Passing Access Token from Facebook JS sdk to PHP session or cookie

我正在使用这个Facebook示例: 从JavaScript SDK示例获取访问令牌

我能够用JS正确获取Facebook登录部分。 但是我想从PHP获取用户ID和访问令牌,以进行服务器端操作(例如添加,删除等)。

这是我的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或会话:

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;

}

我得到了

无法设置Cookie或无法从Cookie获取OAuth数据。

消息,但用户已通过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中存在的已签名请求中获取访问令牌。

参考: https : //developers.facebook.com/docs/php/howto/example_access_token_from_javascript

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM