Facebook Connect - аутентификация и безопасность - PullRequest
2 голосов
/ 06 декабря 2009

Я хотел бы разработать внешний веб-сайт с использованием Facebook Connect вместо собственного процесса входа в систему и регистрации.

Во-первых: пожалуйста, не отвечайте "См. Документацию на facebook.com" или около того. Я прочитал все страницы там несколько раз, я думаю. Но я не могу найти ответ.

Для своей кнопки входа я использую этот код:

<fb:login-button v="2" size="large" autologoutlink="false" onlogin="window.location='/index.php'">Connect with Facebook</fb:login-button>

Для отображения имени текущего пользователя я использую:

<fb:name uid="loggedinuser" linked="true" firstnameonly="false" possessive="false" useyou="false" ifcantsee="Facebook-User"></fb:name>

И, наконец, для выхода из системы я использую следующую ссылку:

<a href="#" onclick="javascript:FB.Connect.logoutAndRedirect('/index.php'); return false">Logout</a>

Это довольно просто. Это хорошо объяснено в документации.

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

Но я не понимаю, что я должен делать. Я хочу сделать это:

  • Если пользователь запрашивает страницу «members.php» и он не вошел в систему, должно быть сообщение, или он должен быть перенаправлен. Но функция JavaScript в Facebook небезопасна? Обычно я использую аутентификацию на стороне сервера.
  • Я хотел бы знать, вошел ли пользователь в систему или нет, чтобы показать кнопку входа или ссылку выхода из системы.
  • Если пользователь вошел в систему, я хотел бы узнать его идентификатор на Facebook.

Заранее спасибо за помощь!

Ответы [ 3 ]

4 голосов
/ 07 декабря 2009

Вы правы, что Javascript не является безопасным. Все, что вы делаете в Javascript - это улучшаете пользовательский интерфейс, а не повышаете безопасность.

Если вы используете официальную библиотеку PHP, вам просто нужно добавить следующие строки кода в начало вашего members.php,

$facebook = new Facebook(API_KEY, API_SECRET);
$fb_user = $facebook->require_login();

Это перенаправит пользователя на Facebook для входа в систему, если он не вошел в систему.

0 голосов
/ 07 декабря 2009

Если вы хотите быть действительно в безопасности, вы должны проверить, вошел ли он в систему, когда пытается получить members.php на вашей стороне сервера, используя PHP-библиотеку для FB.

По кнопке я бы сделал что-то вроде этого:

FB.Connect.init(...);
FB.ensureInit(function() {
FB.Connect.get_status().waitUntilReady( function( status ) {
   switch ( status ) {
     case FB.ConnectState.connected:
        hideLoginButton();
        loggedIn = true;
        break;
     case FB.ConnectState.appNotAuthorized:
     case FB.ConnectState.userNotLoggedIn:
        showLoginButton();
        loggedIn = false;
   }
 });
});
0 голосов
/ 07 декабря 2009

Не будет FB.Connect.get_status () делать то, что вам нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...