【发布时间】:2015-08-13 12:02:48
【问题描述】:
当我单击我的注销 url 时,我的 facebook php sdk getLogoutUrl 无法正常工作。 它带我回到我给定的重定向 url,但它不会破坏我的 facebook 会话我仍然可以在我的页面和注销 url 上看到我的 var_dump($fb_data) 数组。
这是我正在使用 codeigniter 的代码 我的 lib_login 库函数 facebook 代码
public function facebook()
{
$facebook_default_scope = explode(',', $this->ci->config->item("facebook_default_scope"));
$facebook_app_id = $this->ci->config->item("facebook_app_id");
$facebook_api_secret = $this->ci->config->item("facebook_api_secret");
// init app with app id and secret
FacebookSession::setDefaultApplication($facebook_app_id, $facebook_api_secret);
// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper(site_url('login/facebook'));
// see if a existing session exists
if (isset($_SESSION) && isset($_SESSION['fb_token'])) {
// create new session from saved access_token
$session = new FacebookSession($_SESSION['fb_token']);
// validate the access_token to make sure it's still valid
try {
if (!$session->validate()) {
$session = null;
}
} catch (Exception $e) {
// catch any exceptions
$session = null;
}
}
if (!isset($session) || $session === null) {
// no session exists
try {
$session = $helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {
// When Facebook returns an error
// handle this better in production code
print_r($ex);
} catch(Exception $ex) {
// When validation fails or other local issues
// handle this better in production code
print_r($ex);
}
}
// see if we have a session
if (isset($session)) {
// save the session
$_SESSION['fb_token'] = $session->getToken();
// create a session using saved token or the new one we generated at login
$session = new FacebookSession($session->getToken());
// graph api request for user data
$request = new FacebookRequest($session, 'GET', '/me?fields=id,name,accounts{access_token,category,name,id,perms},permissions');
$response = $request->execute();
// get response
$graphObject = $response->getGraphObject()->asArray();
$logoutUrl = site_url('login');
$fb_data = array(
'me' => $graphObject,
'loginUrl' => $helper->getLoginUrl($facebook_default_scope),
'logoutUrl' => $helper->getLogoutUrl($session,$logoutUrl),
);
$this->ci->session->set_userdata('fb_data', $fb_data);
} else {
$fb_data = array(
'me' => null,
'loginUrl' => $helper->getLoginUrl($facebook_default_scope),
'logoutUrl' => $helper->getLogoutUrl($session,$logoutUrl),
);
$this->ci->session->set_userdata('fb_data', $fb_data);
}
return $fb_data;
}
这是我的控制器的功能
public function facebook()
{
$fb_data = $this->lib_login->facebook();
if (isset($fb_data['me'])) {
echo "<pre>";
var_dump($fb_data);
echo "</pre>";
echo '<a href="' . $fb_data['logoutUrl'] . '">logout</a>';
} else {
echo '<a href="' . $fb_data['loginUrl'] . '">Login</a>';
}
}
当我使用此代码登录我的帐户时,注销 url 和 $fb_data 数组会出现在我的页面上,但是当我注销并刷新我的页面时,它仍然是他们的。有人能告诉我这里做错了什么吗。
【问题讨论】:
-
您想要创建一个页面或方法,您将取消设置
fb_token并通过header('Location: login.php');或 CIredirect('controller/method', 'refresh'); -
@Tpojka 我只是想在我点击 logut url 时破坏 Facebook 会话,它应该带我进入登录页面。如果我去 login/facebook 方法 uri 那么它应该向我显示一个登录 url 而不是var_dump($fb_data);
-
最近我看到了 google auth 视频系列,使用(谷歌和 Facebook)非常相似,我可以告诉你需要取消设置创建的会话。检查here。
-
@Tpojka 这是给 google 我需要这个给 facebook :(
-
所以按照我在第一条评论中所写的示例并取消设置 fb 会话。 2¢
标签: php facebook codeigniter facebook-graph-api facebook-php-sdk