Как проверить, если пользователь вошел в систему с новым Facebook php api - PullRequest
17 голосов
/ 14 июля 2010

Я перевожу мое старое приложение FB на новый API графа, используя PHP API

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

Таким образом, код каждой отдельной страницы 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} к очень одиночному URL.

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

РЕДАКТИРОВАТЬ

Это, кажется, делает трюк

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/>" ;
}

1 Ответ

19 голосов
/ 15 июля 2010

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

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