Поэтому Facebook изменил процесс аутентификации. Еще раз. Пример в SDK PHP:
$user = $facebook->getUser(); if ($user) { try { $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } }
Однако теперь, как мы аутентифицируем пользователей, которые еще не прошли аутентификацию? Мы просто создаем оператор else
и вызываем результат $facebook->getLoginUrl()
?
Кроме того, приведенный выше пример дает мне ошибку, поскольку вызов $facebook->getUser()
возвращает мой идентификатор пользователя, но тогда мое приложение падает, когда пытается вызвать $facebook->api('/me')
давая ошибку:
Fatal error: Uncaught OAuthException: токен активного доступа должен использоваться для запроса информации о текущем пользователе. брошен в /home/woohoobi/public_html/facebookv2/inc/facebook.php в строке 560
Любая помощь в том, как аутентифицировать пользователя, не прошедшего проверку подлинности, будет отличной.
Когда вы это сделаете
$user = $facebook->getUser();
с $user
not null не означает, что у вас есть действительный токен доступа для выполнения некоторых вызовов API. Это просто означает, что пользователь вошел в систему.
Чтобы проверить, есть ли у вас токен доступа, один из способов – попытаться сделать вызов API, как код, который вы написали в своем вопросе:
require "facebook.php"; $facebook = new Facebook(array( 'appId' => YOUR_APP_ID, 'secret' => YOUR_APP_SECRET, )); $user = $facebook->getUser(); if ($user) { // The user is logged in try { $user_profile = $facebook->api('/me'); // Here : API call succeeded, you have a valid access token } catch (FacebookApiException $e) { // Here : API call failed, you don't have a valid access token // you have to send him to $facebook->getLoginUrl() $user = null; } } // else : the user is not logged in
Таким образом, у вас есть 2 случая, когда вам нужно отправить своего пользователя в $facebook->getLoginUrl()
и в обоих случаях мы сделали $user == null
. Поэтому нам просто нужно добавить:
<?php if ($user): ?> <a href="<?php echo $facebook->getLogoutUrl() ?>">Logout of Facebook</a> <?php else: ?> <a href="<?php echo $facebook->getLoginUrl() ?>">Login with Facebook</a> <?php endif ?>
Для полного потока вы можете увидеть пример PHP PHP SDK, который хорошо документирован.
Надеюсь, это поможет.
Это помогло мне … много! Итак, пользователю просто нужно сначала принять ваше приложение, чтобы использовать userdata.
<body> <?php if (!$user_id) echo("<script> top.location.href='" . $facebook->getLoginUrl() . "'</script>"); ?>
У меня была такая же проблема с вызовом getUser (), возвращающим 0. Однажды он работал, а следующий – нет. Я не понял, что PHP SDK предназначен для использования в сочетании с JS SDK. Вы должны следовать этим инструкциям: https://developers.facebook.com/docs/reference/javascript/ – включить конфигурацию после, и вы должны быть отсортированы.