Я пытаюсь реализовать сайт Единой точки входа Подключения Facebook. У меня первоначально просто была Кнопка соединения (<fb:login-button>
), который пользователь должен был нажать каждый раз, когда они хотели регистрироваться. У меня теперь есть автоматическая работа функций входа в систему и выхода из системы. Таким образом, мой сайт будет обнаруживать зарегистрированный аккаунт в Facebook и автоматически аутентифицировать их, если он может найти соответствие к одним из учетных записей пользователей моего сайта, и автоматически deauthenticate, если сессия Facebook проиграна. У меня также есть ручная кнопка выхода из системы, которая зарегистрирует пользователя и из моего сайта и из Facebook. Все те работают правильно, но теперь моя исходная Кнопка соединения периодически не представляется правильно. Это просто обнаруживается как простой 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>
Некоторые вещи я уже посмотрел на:
У меня есть подозрение, что существует что-то еще, что я должен делать после выхода из системы (как очищающаяся сессия или cookie), но согласно всему я читал о Подключении Facebook, все, что я должен сделать, вызывают функцию выхода из системы (и deauthenticate на моей серверной стороне). Я действительно в недоумении; у кого-либо есть какие-либо идеи, что могло быть неправильным?
убедитесь, что вы вызываете facebook js include (FeatureLoader) в ОЧЕНЬ КОНЕЦ вашей страницы, чтобы ваша страница отображалась, а затем facebook JS творит чудеса после факт превратить текст в кнопку.иначе это гонка между вызовом серверов fb и загрузкой содержимого вашего сайта в браузере ...
по крайней мере, это была проблема, с которой я столкнулся.