2010-11-22 178 views
0

我有一個頁面,允許用戶使用Facebook API登錄。但當然,問題在於用戶更換頁面時,需要重新授權登錄。Facebook API會話難題

所以在我的主網頁我有

$facebook = new Facebook(array(
    'appId' => 'xxx', 
    'secret' => 'xxxxxx', 
    'cookie' => false, 
)); 

$session = $facebook->getSession(); 

if ($session) { 
    try { 
     $uid = $facebook->getUser(); 
     $me = $facebook->api('/me'); 

     $_SESSION['fb_session'] = $me; 
     $_SESSION['fb_session']['loginUrl'] = $facebook->getLoginUrl(); 
     $_SESSION['fb_session']['logoutUrl'] = $facebook->getLogoutUrl(); 
     $_SESSION['fb_session'] = array_merge($_SESSION['fb_session'], $session); 
    } 

    catch (FacebookApiException $e) { 
     error_log($e); 
     unset($_SESSION['fb_session']); 
    } 
} 

if ($_SESSION['fb_session']) { 
    $x = $facebook->api("/{$_SESSION['fb_session']['id']}"); 
    print "<img src='https://graph.facebook.com/{$x['id']}/picture' />";       
    print "<a href='facebook_logout.php'></a>"; 
} 
else { 

    $loginUrl = $facebook->getLoginUrl(); 
    print "<a href='{$facebook->getLoginUrl()}'>Login to Post Comment</a>"; 
} 

而且我facebook_logout.php樣子:

header("location:" . $_SESSION['fb_session']['logoutUrl']); 
unset($_SESSION['fb_session']); 

現在的事情是我已經設置在第一次就會話時我驗證的用戶。但是如果他改變他的檔案會發生什麼。或者在他的API中禁止我的網站。

我已經用我的個人資料測試過了。當我允許它時,它工作正常。然而,當我從我的隱私設置中刪除應用程序我仍然看到我的照片和姓名等

下面是輸出到fb_session

[id] => id 
[name] => Shahmir Javaid 
[first_name] => Shahmir 
[last_name] => Javaid 
[link] => http://www.facebook.com/shahmirj 
[about] => I was Born a n00b, I am still a n00b and il never be not a n00b. 
[gender] => male 
[locale] => en_GB 
[verified] => 1 
[updated_time] => 2010-11-22T15:45:22+0000 
[loginUrl] => https:// 
[logoutUrl] => https:// 
[session_key] => xxx 
[uid] => xxx 
[expires] => 1290448800 
[secret] => xxx 
[access_token] => xxx 
[sig] => xxx 

我重新認證的UID,所以我的到期時間可以追溯到如何當然,沒有讓用戶重新登錄?

回答

0

如果用戶因爲指向graph.facebook.com/USERID/picture而更改了他的個人資料圖片(這似乎是您在配置文件中使用的所有圖片),則會顯示更新後的圖片。您可以使用應用程序設置的高級選項卡中的facebook deauthorize回調url來在用戶移除應用程序時提醒您的應用程序。

如果您在獲取數據之前存儲了取消授權的ID列表並搜索該列表,那麼您可以取消設置會話並從數據庫中刪除該ID,該ID將再次顯示登錄URL並刪除該用戶的Facebook連接你的後端。

+0

所有即時消息存儲是uid和名稱。個人資料圖片從'$ x = $ facebook-> api(「/ {$ _ SESSION ['fb_session'] ['id']}」);`但我的觀點是,dosent即將過期。而且我有點失去了關於deautorize回調url – 2010-11-22 16:22:02