Facebook подключить API статический URL - PullRequest
3 голосов
/ 30 мая 2011

Есть ли способ использовать api facebook connect статическим способом?

Когда мы используем php sdk facebook, ссылка или кнопка для входа в Facebook выглядит примерно так: https://www.facebook.com/dialog/oauth..................

я хочу исключить включение php sdk на каждую страницу, потому что это приведет к некоторой дополнительной обработке и нагрузке на сервер в пиковое время.

Я хочу выполнить проверку сеанса, чтобы узнать, является ли пользовательвошел в систему, проверив, например, если его идентификатор пользователя Facebook и имя сохранены в сеансе, а затем, если нет, отобразить кнопку статического входа.затем после входа в систему с помощью facebook он попадает на facebook-login.php, который включает php-файл facebook, обрабатывает свои данные и сохраняет их в сеансе, так что он остается зарегистрированным без включения 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 ]

0 голосов
/ 31 мая 2011

Это хороший вопрос. Во-первых, пользователь вошел в ваше приложение, что означает, что у вас есть действительный токен доступа для пользователя .

И нет никакого способа убедиться, что токен доступа действителен перед вызовом 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>';
    }
}

Надеюсь, это поможет!

0 голосов
/ 14 октября 2014

Выбранный ответ на самом деле не отвечает на вопрос.

Если вы хотите изолировать весь код Facebook, необходимый для генерации вызова функции getLoginUrl, в отдельный файл, вы можете легко сделать это с помощью мета-обновления.

Таким образом, в своем заголовке укажите ссылку «Войти через Facebook» на «facebook_login.php».На этой странице включите необходимые вызовы из SDK для getLoginUrl, а затем добавьте следующую строку HTML.

<meta http-equiv="refresh" content="0;URL=<?=$helper->getLoginUrl(array('email', 'user_friends'));?>">

Я проверял это несколько раз, и это работает.

К вашему сведению, используя Facebook SDK 4.0.

0 голосов
/ 30 мая 2011

просто загрузите SDK и сделайте что-то вроде:

echo '<a href="' . $facebook->getLoginUrl( array('next'=>'http://mysite.com', 'req_perms' => 'email,read_stream,publish_stream')) . '">Connect to Facebook</a>';

, чтобы URL всегда был действительным для пользователя, вышедшего из системы

...