我想检查在导航到index.php时是否已经登录到facebook,以便自动重定向到主页。
但是,我的代码仅在单击loggin链接后才会检查。
Facebook\FacebookSession::setDefaultApplication(Globals::FB_APP_ID, Globals::FB_APP_SECRET);
$helper = new Facebook\FacebookRedirectLoginHelper("myurl");
try {
$session = $helper->getSessionFromRedirect();
} catch (FacebookRequestException $ex) {
// When Facebook returns an error
} catch (Exception $ex) {
// When validation fails or other local issues
}
// see if we have a session
if (isset($session)) {
// graph api request for user data
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
// get response
$graphObject = $response->getGraphObject();
header("location:home.php");
} else {
// show login url
echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}
我检查了有关Facebook PHP SDK的其他线程,但与sdk 4.0无关。没什么对我有用。
我可以在会话中添加一个令牌,但是如果我在第一次访问之前就已经登录到Facebook,那么它将无法正常工作。如果我从Facebook上注销但没有从我的网站注销,这也会引起问题。
因为我发现这个问题经常被问到而没有答案,所以我决定与社区分享我的所作所为。
将$session
在我的代码变量包含的访问令牌可用于重新instanciating会议其他地方简单地做一个new FacebookSession('token')
。
考虑到这一点,首次登录时,我从中检索令牌$session
并将其存储在中$_SESSION
。然后,我创建了一个简单的util函数,该函数首先检查是否$_SESSION
设置了变量,然后尝试使用存储的令牌实例化新的FacebookSession。如果该存储无效,则该会话不会实例化,那么我可以在util函数中检测到该存储,然后返回该用户是否实际登录。
请注意,当Facebook用户注销时,访问令牌无效。
登录网址+令牌存储:
FacebookSession::setDefaultApplication(Globals::FB_APP_ID, Globals::FB_APP_SECRET);
$helper = new Facebook\FacebookRedirectLoginHelper("http://localhost/PoubellesDeMerde/PoubellesDeMerde/index.php");
try {
$session = $helper->getSessionFromRedirect();
} catch (FacebookRequestException $ex) {
// When Facebook returns an error
} catch (Exception $ex) {
// When validation fails or other local issues
}
// see if we have a session
if (isset($session)) {
// graph api request for user data
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
$_SESSION['token'] = $session->getToken();
} else {
// show login url
echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}
有用的功能:
public static function isLoggedIn()
{
$id=0;
if(isset($_SESSION['token']))
{
$session = new FacebookSession($_SESSION['token']);
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
$graphObject = $response->getGraphObject();
$id = $graphObject->getProperty("id");
}
return $id!=0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句