Кнопка входа в Facebook Connect не отображается - PullRequest
5 голосов
/ 31 марта 2010

Я пытаюсь создать сайт единого входа Facebook Connect. Первоначально у меня просто была кнопка «Подключиться» (<fb:login-button>), которую пользователь должен был нажимать каждый раз, когда он хотел войти в систему. Теперь у меня работают функции автоматического входа и выхода из системы. То есть мой сайт обнаружит зарегистрированную учетную запись Facebook и автоматически аутентифицирует их, если сможет найти совпадение с одной из учетных записей пользователя моего сайта, и автоматически деавторизует в случае потери сеанса Facebook. У меня также есть кнопка ручного выхода из системы, с помощью которой пользователь выходит из моего сайта и Facebook. Все они работают правильно, но теперь моя оригинальная кнопка Connect периодически не отображается правильно. Он просто отображается как обычный XHTML (т. Е. Он выглядит как обычный текст, а не как кнопка, и его нельзя кликнуть), и XFBML не применяется. Вот основной код:

На каждой странице:

<body>
{...}
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

<script type="text/javascript>
FB.init('APIKey', '/xd_receiver.htm');

var isAuth; // isAuth determines if the user is authenticated on my site
            // it should be true on the logout page, false on the login page
FB.ensureInit(function(){ 
    var session = FB.Facebook.apiClient.get_session();
    if (session && !isAuth) {
        PageMethods.FacebookLogin(session.uid, session.session_key, FBLogin, FBLoginFail);
        // This is an AJAX call that authenticates the user on my site. 
    } else if(!session && isFBAuth) {
        PageMethods.FacebookLogout(FBLogout, FBLogoutFail);
        // This is an AJAX call that deauthenticates the user on my site.
    }
    // the callback functions do nothing at the moment
});
</script>

{...}
</body>

На странице входа: (эта страница не видна вошедшим в систему пользователям)

<body>
{...}
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

<script type="text/javascript>
    FB.init('APIKey', '/xd_receiver.htm');
    {...} // auto-auth code as on every page
</script>

<!-- This is the button that fails to render -->
<fb:login-button v="2" onlogin="UserSignedIntoFB();" size="large" autologoutlink="true"><fb:intl>Login With Your Facebook Account</fb:intl></fb:login-button>

<script type="text/javascript">
    function UserSignedIntoFB() {
        {...} // posts back to the server which authenticates the user on my site & redirects
    }
</script>
{...}
</body>      

На странице выхода: (эта страница не видна зарегистрированным пользователям)

<body>
{...}
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

<script type="text/javascript>
    FB.init('APIKey', '/xd_receiver.htm');
    {...} // auto-auth code as on every page
</script>

<script type="text/javascript">
    function FBLoggedOut() {
        {...} // posts back to the server which deauthenticates the user on my site & redirects to login
    }

    function Logout() {
        if (FB.Facebook.apiClient.get_session()) {
            FB.Connect.logout(FBLoggedOut); // logs out of Facebook if it's a Facebook account
            return false;
        } else {
            return true; // posts back if it's a non-Facebook account & redirects to login
        }
    }
</script>
<a onclick="return Logout();" href="postback_url">Sign Out</a>
{...}
</body>

Некоторые вещи, которые я уже посмотрел:

  • Автоматический вход и выход из системы работают отлично. Я могу войти и выйти из Facebook на другой вкладке, и мой сайт заметит изменения сеанса и обновит их соответствующим образом.
  • Кажется, что выход из системы работает нормально: при нажатии он деаутентифицирует пользователя и выводит его из Facebook, как и предполагалось.
  • Проблема , по-видимому, обычно возникает после выхода пользователя из Facebook, но это происходит с некоторой периодичностью; это может произойти до того, как они войдут в систему, и пройдет через несколько минут / обновлений.
  • Некоторые файлы cookie остаются после процесса входа / выхода, но их удаление не устраняет проблему.
  • Перезапуск браузера не решает проблему.
  • Пользователь определенно выходит из Facebook и моего сайта, когда возникает проблема. Я проверил сеансы Facebook и проверку подлинности сайта.
  • Все внешние вызовы сценариев обслуживаются правильно.
  • Редактировать: Кроме того, когда кнопка входа в систему выполняет визуализацию, она работает нормально.

У меня есть подозрение, что есть еще что-то, что мне нужно сделать при выходе из системы (например, очистка сеанса или файлов cookie), но в соответствии со всем, что я прочитал о Facebook Connect, все, что мне нужно сделать, это вызвать функцию выхода из системы (и деаутентифицировать на моей стороне сервера). Я действительно в растерянности; У кого-нибудь есть идеи, что может быть не так?

1 Ответ

6 голосов
/ 02 апреля 2010

Обязательно вызовите файл facebook js include (FeatureLoader) в ОЧЕНЬ КОНЕЦ вашей страницы, чтобы ваша страница отображалась, а затем Facebook JS совершает магию, превращая текст в кнопку. в противном случае это гонка между вызовом серверов fb и загрузкой контента ваших сайтов в браузер ...

по крайней мере, с этой проблемой я столкнулся.

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