Facebook PHP SDK处理访问令牌
我已经找到了很多不同的答案,但我仍然有点困惑,我应该如何处理facebook访问令牌。 我遇到的一个主要问题是浏览器中存储了哪些信息。例如,我登录到应用程序,令牌过期,除非在浏览器中清除Cookie/app设置,否则我无法再次登录 我偶然发现了这条线索: 它向我展示了如何通过php创建扩展访问令牌 我的问题是: 1。我是否需要将访问令牌存储在任何位置 2.访问令牌过期或无效时会发生什么情况?目前,我的应用程序只是在短期访问到期时停止工作 3.我有没有办法处理它们以检查它们是否过期? 我使用的是PHPSDK,基本上使用了标准if($user)。。。像这样:Facebook PHP SDK处理访问令牌,php,facebook,sdk,access-token,Php,Facebook,Sdk,Access Token,我已经找到了很多不同的答案,但我仍然有点困惑,我应该如何处理facebook访问令牌。 我遇到的一个主要问题是浏览器中存储了哪些信息。例如,我登录到应用程序,令牌过期,除非在浏览器中清除Cookie/app设置,否则我无法再次登录 我偶然发现了这条线索: 它向我展示了如何通过php创建扩展访问令牌 我的问题是: 1。我是否需要将访问令牌存储在任何位置 2.访问令牌过期或无效时会发生什么情况?目前,我的应用程序只是在短期访问到期时停止工作 3.我有没有办法处理它们以检查它们是否过期? 我使用的是P
require 'sdk/src/facebook.php';
$facebook = new Facebook(array(
'appId' => 'XXXXXXXXXXXXXXXXXXXXX',
'secret' => 'XXXXXXXXXXXXXXXXXXXXX',
));
$user = $facebook->getUser();
if( $user ){
try{
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
if (!$user){
$params = array(
'scope' => 'email',
);
$loginUrl = $facebook->getLoginUrl( $params );
echo '<script type="text/javascript">
window.open("'. $loginUrl .'", "_self");
</script>';
exit;
}
if( $user ){
$access_token = $facebook->getExtendedAccessToken();
$get_user_json = "https://graph.facebook.com/me?access_token="
. $access_token;
// Rest of my code here...
}
让我们来看看你的问题: 我是否需要将访问令牌存储在任何位置 这取决于您的应用程序。首先问问你自己,当用户不在场(未登录到你的应用程序)时,你是否需要代表他执行操作?
如果答案是是,那么您需要扩展用户令牌,这可以在拥有有效的用户会话时通过调用此方法使用PHP-SDK来完成:
setExtendedAccessToken()
此外,您还应参考本文档:
当访问令牌过期或无效时会发生什么情况。。。
有没有办法让我检查一下他们
过期了吗
这就是代码中catch子句的用武之地,而facebook示例只记录错误(error\u log($e);
),您应该处理它
Facebook已经有了关于此的教程:
此外,您还应参考并相应地调整代码
我还应该做些什么来处理代币
见上文
我应该在页面之间传递访问令牌,还是可以
在每一页的顶部再次调用它
您不需要执行任何操作,因为PHP-SDK将为您处理令牌;您是否注意到您正在调用:$user\u profile=$facebook->api('/me')
不附加用户访问\u令牌
SDK是从末尾添加的,因此您不必担心它。我也遇到了同样的问题,但我在您的帮助下解决了它。我正在使用PHPSDK连接到Facebook API,所以我做了这个
$facebook = new Facebook(array(
'appId' => 'API_ID',
'secret' => 'SECRET',
));
// Get User
$user = $facebook->getUser();
// Verifing if user is logged in.
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
// Verify if user is logged in, if it is... Save the new token.
if($user){
// Request the access_token to the
$access_token = $facebook->getAccessToken()
// Saving the new token at DB.
$data = array('access_token' => $access_token);
$this->db->where('userid',$user);
$this->db->update('facebook', $data);
}
从上一次我看Facebook API(去年)开始,当它失效时,你需要获得一个新的访问令牌。您不需要在页面之间传递令牌,但我相信对API的每次调用都需要签名。@Tebc感谢您的回答。您知道在交换扩展令牌后要做什么吗?我不断遇到一个问题,几个小时后,加载页面时突然出现(!$user),这导致除非清除浏览器,否则永远无法登录。如何解决这个问题?
$facebook = new Facebook(array(
'appId' => 'API_ID',
'secret' => 'SECRET',
));
// Get User
$user = $facebook->getUser();
// Verifing if user is logged in.
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
// Verify if user is logged in, if it is... Save the new token.
if($user){
// Request the access_token to the
$access_token = $facebook->getAccessToken()
// Saving the new token at DB.
$data = array('access_token' => $access_token);
$this->db->where('userid',$user);
$this->db->update('facebook', $data);
}