Javascript 将访问令牌从Facebook JS sdk传递到PHP会话或cookie

Javascript 将访问令牌从Facebook JS sdk传递到PHP会话或cookie,javascript,php,facebook,facebook-graph-api,cookies,Javascript,Php,Facebook,Facebook Graph Api,Cookies,我正在通过以下Facebook示例进行工作: 我能够用JS获得Facebook登录部分。 但是我想从PHP获取用户ID和访问令牌,用于服务器端操作,如添加、删除等 这是我的JS部件,工作正常: function fb_login() { FB.login(function(response) { if (response.authResponse) { $.post("actions.php?js-login").done(function(d

我正在通过以下Facebook示例进行工作:

我能够用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;

}
if(isset($\u GET['js-login'])){
$helper=$fb->getJavaScriptHelper();
试一试{
$accessToken=$helper->getAccessToken();
}捕获(Facebook\Exceptions\FacebookResponseException$e){
//当图形返回错误时
echo“图形返回错误:”。$e->getMessage();
出口
}捕获(Facebook\Exceptions\FacebookSDKException$e){
//验证失败或其他本地问题时
echo“Facebook SDK返回错误:”。$e->getMessage();
出口
}
如果(!isset($accessToken)){
echo“无法从cookie获取cookie集或OAuth数据”;
出口
}
//登录
回显“访问令牌”;
var_dump($accessToken->getValue());
$\会话['fb\ U访问\ U令牌']=(字符串)$accessToken;
出口
}
我明白了

无法从cookie中获取cookie集或OAuth数据


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

您需要确保使用

{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中存在的已签名请求中获取访问令牌


参考资料:

您发现了吗?这里也有同样的问题。。。JS部分工作正常(FB登录工作),但似乎没有设置cookie。必须用JS植入cookie。。。它可以工作,但并不漂亮。根据,创建的cookie应该是fbsr{your app id}。我只是检查了一下,没有为我创建cookie。+你应该在问题中添加FB.init内容,这样我们就可以确保问题不是由此产生的。我在本地主机上开发时遇到了这个问题,你也是吗?这可能会有所帮助:而且