2010-07-14 3 views
17

Я мигрирующей мой старый приложение FB на новый график API с помощью PHP APIКак проверить, если пользователь вошел в систему с новым facebook PHP API

У меня есть две страницы: казенные (которые не требуют входа пользователя) и частные (которые)

Таким образом, код каждой страницы PHP в моем приложении работает следующим образом:

if (this_page_requires_user_login){ 
     $facebook = new Facebook(...) ; 
     $session = $facebook->getSession ; 
     if (!$session){ 
       $url =$facebook.getLoginUrl(array(next => current_page); 
       echo "<fb:redirect url=$url/>" ; 

} 
// the rest of the code continues here 

Теперь, как вы можете видеть, этот способ работы направляет каждую страницу в URL входа и хотя он работает, он также медленный и добавляет & session = {bla} string до очень одного URL-адреса.

Мне нужен способ проверить, где пользователь уже зарегистрировался, прежде чем перенаправить его на страницу входа. Но я не могу найти такой метод в php api. Каков наилучший способ сделать это?

EDIT

Это, казалось, сделать трюк

if ($session) { 
    try { 
    $me = $facebook->api('/me'); 
    if ($me) { 
     // here comes your code for user who is logged in 
    } 
    } catch (FacebookApiException $e) { 
    login() 
    } 
}else{ 
login() 
} 

function login(){ 

    $url =$facebook.getLoginUrl(array(next => current_page); 


     echo "<fb:redirect url=$url/>" ; 
} 

ответ

19

Если я читаю ваш код правильно, только если ни одна сессия не возвращается вы делаете редирект? Согласно комментариям в Facebook's example, даже если вы получите сеанс назад, вы не можете считать его действительным. Вы будете знать наверняка только попытку вызова API, требующего зарегистрированного пользователя. Это лучший способ, с помощью которого я уверенно определить статус входа/выхода из системы.

if ($session) { 
    try { 
    $me = $facebook->api('/me'); 
    if ($me) { 
     //User is logged in 
    } 
    } catch (FacebookApiException $e) { 
    //User is not logged in 
    } 
} 
+3

Если вы сохранили маркер доступа и использовать его, это не работает, потому что вызов API до сих пор работает без выбрасывания исключения, но тогда, когда вы перенаправить их на getLogoutUrl, например, он просто посылает их на главную страницу Facebook, вместо того, чтобы отправить вас обратно на ваш сайт – andrewtweber

+0

@andrewtweber. Благодарю. –

+0

Вы должны были расшифровать URL-адрес раньше, поэтому вы не перенаправили: