我想在导航到index.php时检查是否已经登录到facebook,这样我就会自动重定向到主页。
但是,我的代码只会在点击登录链接后进行检查。
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注销它也会引起问题从我的网站退出。
答案 0 :(得分:1)
由于我发现这个问题在没有回答的情况下经常被问到,我决定与社区分享我的所作所为。
我的代码中的$session
变量包含一个访问令牌,可用于在其他任何地方重新执行会话,只需执行new FacebookSession('token')
。
考虑到这一点,当我第一次登录时,我会从$session
中检索令牌并将其存储在$_SESSION
中。然后,我创建了一个简单的util函数,首先检查是否设置了$_SESSION
变量,然后尝试使用存储的令牌实现新的FacebookSession。如果stoken无效,会话将不会实例化,然后我可以在我的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>';
}
Util功能:
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;
}