статический 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 3

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.