статический url API facebook connect
Есть ли способ использовать api facebook connect статическим способом?
Когда facebook php sdk используется, ссылка или кнопка для входа в facebook выглядит примерно так: https://www.facebook.com/dialog/oauth..................Что я хочу, так это исключить включение PHP sdk на каждой странице, потому что это вызовет дополнительную обработку и нагрузку на сервер в пиковое время.
Я хочу сделать проверку сеанса, чтобы узнать, вошел ли пользователь в систему, проверив exemple если его имя и идентификатор пользователя facebook хранятся в сеансе, то если нет, отобразите статическую кнопку входа. после Facebook-логина он попадает в facebook-логин.php, который будет включать в себя Facebook PHP sdk и обрабатывать его данные и хранить их в сеансе, так что он остается в системе, не включая PHP sdk на каждой странице.
Структура url, которую я получаю с помощью $facebook - >getLoginUrl() это:
Https://www.facebook.com/dialog/oauth?client_id={MY_APP_KEY}&scope={PERMISSIONS}&redirect_uri={MY_SITE/facebook-login.php}&state={A_32_CHAR_CODE_LIKE_MD5_MAYBE}
Последний вопрос: каким будет URL-адрес в кнопке входа?
3 ответа:
Просто загрузите sdk и сделайте что-то вроде:
echo '<a href="' . $facebook->getLoginUrl( array('next'=>'http://mysite.com', 'req_perms' => 'email,read_stream,publish_stream')) . '">Connect to Facebook</a>';
Этот url-адрес всегда будет действителен для пользователя, вышедшего из системы
Это хороший вопрос. Во-первых, пользователь вошел в ваше приложение означает, что у вас есть действительный маркер доступа для пользователя.
И нет никакого способа убедиться, что маркер доступа действителен, прежде чем делать вызов API с этим маркером доступа. Поэтому, если вы хотите убедиться, что пользователь все еще входит на каждую страницу, вам нужно сделать API-вызов Facebook на каждой из них. Вроде тяжеловато, но другого выхода нет.
Что вы можете сделать, так это предположить, что маркер доступа у вас есть действует и проверяет только один раз в то время (когда вам действительно нужно убедиться, что пользователь вошел в систему).
У вас может быть другой сценарий :
У вас нет данных Facebook о пользователе: пользователь не зарегистрирован в вашем приложении наверняка.
Вы можете прочитать идентификатор пользователя , но у вас может не быть маркера доступа для этого пользователя : Пользователь не может войти в систему.
Вы можете прочитать маркер доступа , но он может быть недействительным (имеет истекает или отзывается пользователем): пользователь не может войти в систему.
У вас естьдопустимый маркер доступа : пользователь вошел в систему наверняка.
Вы можете прочитать идентификатор пользователя и маркер доступа в сеансе. Массив сеансов выглядит следующим образом:
[fb_148195765253871_access_token] => 14819576525... [fb_148195765253871_user_id] => 1536397056
Число в ключах массива (здесь
148195765253871
) - это идентификатор вашего приложения.Таким образом, на каждой странице вы можете проверить, установлены ли эти ключи, а если нет, загрузите SDK и дважды проверьте (потому что доступ может храниться в некоторых других местах, которые читает SDK):
if (isset($_SESSION['fb' . YOUR_APP_ID . 'access_token'])) { // assume to user is logged in // and keep going } else { require "facebook.php"; $facebook = new Facebook(array( 'appId' => YOUR_APP_ID, 'secret' => YOUR_APP_SECRET, )); // Make an API call to be sure the user is logged in // ie : that you have a valid access token $user = $facebook->getUser(); // User ID if ($user) { try { $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { $user = null; } } if ($user) { // The user is logged in for sure } else { // The user is not logged in for sure // Make him log in echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>'; } }
Надеюсь, это поможет !
Выбранный ответ на самом деле не отвечает на вопрос.
Если вы хотите изолировать весь код Facebook, необходимый для генерации вызова функции getLoginUrl, в отдельный файл, вы можете легко сделать это с помощью meta refresh.
Итак, в вашем заголовке укажите ссылку " Войти с Facebook "на" facebook_login.РНР". На этой странице включите необходимые вызовы из SDK для getLoginUrl и добавьте следующую строку HTML.
<meta http-equiv="refresh" content="0;URL=<?=$helper->getLoginUrl(array('email', 'user_friends'));?>">
Я проверил это несколько раз раз и это работает.
К вашему сведению, с помощью Facebook SDK 4.0.