Próbuję zaimplementować witrynę logowania jednokrotnego na Facebooku Connect. Pierwotnie miałem przycisk Connect (<fb:login-button>
), który użytkownik musiał kliknąć za każdym razem, gdy chciał się zalogować. Teraz mam już działa funkcje automatycznego logowania i wylogowania. Oznacza to, że moja witryna wykryje zalogowane konto Facebooka i automatycznie je uwierzytelni, jeśli znajdzie pasujące do jednego z kont użytkowników mojej strony i automatycznie deauthenticate, jeśli sesja na Facebooku zostanie utracona. Mam również przycisk ręcznego wylogowania, który wyloguje użytkownika zarówno z mojej strony, jak i Facebooka. Wszystkie te działają poprawnie, ale teraz mój oryginalny przycisk Connect nie jest wyświetlany nieprawidłowo. Po prostu pokazuje się jako zwykły XHTML (tj. Wygląda na zwykły tekst - nie przycisk - i nie można go skasować) i nie stosuje się XFBML. Oto kod podstawowy:Przycisk logowania do serwisu Facebook Connect nie renderowany
Na każdej stronie:
<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>
Na stronie logowania: (ta strona nie jest widoczna dla zalogowanych użytkowników)
<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>
Na stronie wylogowania: (ta strona nie jest widoczna dla zalogowanych użytkowników out)
<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>
Niektóre rzeczy mam już spojrzał na:
- Automatyczne logowanie i wylogowywanie działają znakomicie. Mogę zalogować się i wylogować z Facebooka na innej karcie, a moja strona zauważy zmiany sesji i odpowiednio je zaktualizuje.
- Wydaje się, że wylogowanie działa poprawnie: po kliknięciu, deauthenticates użytkownika i loguje je z Facebook, zgodnie z przeznaczeniem.
- Wydanie wydaje się być zwykle zdarza się po wylogowaniu użytkownika Facebooka, ale dzieje się to sporadycznie; może się zdarzyć, zanim się zalogują i zniknie po kilku minutach/odświeżeniu.
- Niektóre pliki cookie pozostają po procesie logowania/wylogowania, ale ich usunięcie nie rozwiązuje problemu.
- Ponowne uruchomienie przeglądarki nie rozwiązuje problemu.
- Użytkownik jest zdecydowanie wylogowany z Facebooka i mojej witryny, gdy wystąpi problem. Sprawdziłem sesje Facebooka i uwierzytelnianie witryny.
- Wszystkie wywołania skryptów zewnętrznych są wyświetlane poprawnie.
- Edycja: Również, gdy przycisk logowania powoduje renderowanie, działa poprawnie.
Mam podejrzenie, że jest jeszcze coś muszę robić po wylogowaniu (jak wyczyszczenie sesji lub ciasteczka), ale według wszystkiego Czytałem o Facebook Connect, wszystko co musisz zrobić, to zadzwonić do wylogowania funkcja (i deauthenticate na mojej stronie serwera). Naprawdę jestem w stracie; czy ktokolwiek ma jakieś pomysły, co może być nie tak?
najpierw spróbuję usunąć wszystkie oprócz FeatureLoader.js.php ładowanie + FB.Init + i sprawdź, czy wszystko jest w porządku. zależy od wyników tego eksperymentu, musisz kontynuować debugowanie. –
zerkms
Cóż, robię to na razie i wygląda na to, że działa, bez możliwości automatycznego logowania. Chciałbym tylko wiedzieć, gdzie idę źle. – tloflin