我正在使用这个 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/