Ненадежный вход в PHP Facebook SDK

#php #facebook #facebook-php-sdk

#php #Facebook #facebook-php-sdk

Вопрос:

У меня странное поведение в моем скрипте. Используя Facebook PHP SDK, я создаю кнопку со ссылкой на getLoginUrL() :

 $loginUrl = $facebook->getLoginUrl(array(
    'canvas' => 1,
    'fbconnect' => 0,
    'scope' => 'email',
    'redirect_uri' => 'http://www.myurl.com')
);
 

В большинстве случаев это работает очень хорошо, и я могу получить доступ к информации о пользователе, используя следующий фрагмент кода

     if(!isset($_SESSION['front']['user_id']) || !is_numeric($_SESSION['front']['user_id']))
    {
      if (isset($_REQUEST['code'])) {
        try {
            $user_id = $facebook->getUser();
            $basic = $facebook->api('/me?access_token=' . $access_token);
            if (is_array($basic) amp;amp; is_numeric($user_id)) {
                $user = get_user_id_facebook($basic);
                $_SESSION['front']['user_id'] = $user;
                $_SESSION['front']['user_name'] = $basic['name'];
                $_SESSION['front']['email'] = $basic['email'];
                $_SESSION['front']['fbid'] = $basic['id'];
                return true;
            } else {
                return false;
            }
        } catch (Exception $e) {
            return false;
        }
      }
   }
 

Проблема в том, что иногда я действительно не могу получить доступ к пользовательской информации… почему это так нестабильно? Моя версия php 5.3.2

Комментарии:

1. Если вы можете обновить свой PHP до версии 5.4 , вы можете использовать более новый SDK: github.com/facebook/facebook-php-sdk-v4

2. действительно не удается обновить. в этом проблема?

3. Это не проблема, но было бы решением. Вы должны проверять, не равен ли $user_id 0, и регистрировать любые возникающие исключения.

Ответ №1:

Ваш код ненадежен, поскольку вы выполняете код только в том случае, если code он существует в запросе GET или POST. Что вам действительно следует делать, так это проверять, вошел ли пользователь в систему, например

 if ( $facebook->getUser() != 0 ) {
    // get profile information
} else {
    // log user in
}
 

code Параметр не всегда будет существовать на вашей странице, так как он возвращается Facebook при успешном входе в систему. Но не тогда, когда пользователь получает доступ к вашей странице напрямую или через закладку.

Комментарии:

1. извините, я выполняю этот код, если пользователь не вошел в систему и ЕСЛИ код существует (возврат из входа в Facebook)