Я пытаюсь создать сайт единого входа 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, все, что мне нужно сделать, это вызвать функцию выхода из системы (и деаутентифицировать на моей стороне сервера). Я действительно в растерянности; У кого-нибудь есть идеи, что может быть не так?