在我的Facebook应用程序上,我正在使用Javascript SDK登录用户。如果可以,我将他重定向到此PHP页面(旨在说明我的问题):
测试.php:
<?php
include('config.php');
require('phpsdk.php');
$access_token = $facebook->getAccessToken();
echo $access_token;
echo "<br /><br />";
$user = $facebook->getUser();
echo $user;
?>
(phpsdk.php handels the PHP SDK 启动)
第一次访问测试.php返回有效的访问令牌和登录用户的 ID。但是,当我刷新页面时,访问令牌变为 appID|appSecret 类型。用户仍处于登录状态:getUser 仍返回正确的用户 ID。
有人知道是什么原因造成的吗?
当用户注销时,使用 php sdk 在重定向中清除 Facebook 会话。
注销.php重定向用户并使用 sdk 清除会话数据。
重定向网址示例。 yourdomain.com/Logout.php?destroy=true
参考: https://developers.facebook.com/docs/reference/php/facebook-destroySession/
<?php
session_start();
require './src/facebook.php';
$facebook = new Facebook(array(
'appId' => 'appID',
'secret' => 'appSecret',
'cookie' => true, // enable optional cookie support
));
if(isset($_GET['destroy'])){
$facebook->destroySession();
}
?>
不建议按照您描述的方式一遍又一遍地调用getAccessToken();
。
您应该首先尝试查看令牌是否作为会话在浏览器中,如果没有,则尝试使用该SDK
来查找或请求它。
- 检查浏览器是否有用户,如果没有用户为用户调用 sdk,如果仍然为 null 或 0 身份验证或重新授权。
- 如果用户,请检查浏览器是否有access_token,如果没有令牌,则调用 sdk 以获取令牌。
<?php
session_start();
include('config.php');
require('phpsdk.php');
// need to replace Your_App_ID and YourAppId with your applications id.
$facebook = new Facebook(array(
'appId' => 'Your_App_ID',
'secret' => 'Your_App_Secret',
'cookie' => true, // enable optional cookie support
));
if(isset($_SESSION['fb_YourAppId_user_id'])){
$user = $_SESSION['fb_YourAppId_user_id'];
}else{
$user = $facebook->getUser();
}
if($user){
if(isset($_SESSION['fb_YourAppId_access_token'])){
$access_token = $_SESSION['fb_YourAppId_access_token'];
}else{
$access_token = $facebook->getAccessToken();
}
}
echo $user;
echo "<br /><br />";
echo $access_token;
?>