Fonction de rappel de connexion FB ne répondant pas si l'utilisateur est déjà connecté à Facebook
Je suis à l'aide de fb se connecter à l'aide de js. C'est mon code:
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'xxxxxxxxxxxxxxxx',
status : true,
cookie : true,
xfbml : true,
oauth : true
});
FB.Event.subscribe('auth.login', function(response) {
obj=response.authResponse;
token=obj.accessToken;
setCookie("access_token_fb", token, '2');
window.location.reload();
},true);
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
pour la connexion, je suis en utilisant:
<div class="fb-login-button" scope="email,user_checkins" >Login with Facebook</div>
'auth.connexion' abonnez-vous de la fonction de réponse du gestionnaire, il est appelé lorsque l'utilisateur clique sur le bouton fb et pas déjà connecté à FB, saisissez son adresse e-mail et le mot de passe fb de la fenêtre . Alors que si un utilisateur est déjà connecté à facebook fb boîte de dialogue ouvrir et à fermer. Elle n'est pas alors de passer le contrôle de la réponse virage. J'ai lu quelque part que la force="true" permettent de détecter un changement d'état et l'appel de la fonction arrière. Mais je ne sais pas où ajouter de la force de la vérité. Je pense qu'il devrait être en connexion div. Est-il vrai ou est-il une autre méthode?
merci pour votre temps.
source d'informationauteur Hafiz
Vous devez vous connecter pour publier un commentaire.
Méthode 1:
Mais je crois que EVQ a donné une bonne solution pour le problème, ici, c'est une autre façon d'aborder. L'utilisation de FB.méthode d'ouverture de session avec un lien de connexion.
Corps balisage:
Lorsque vous cliquez sur le bouton, il va exécuter la fonction de rappel à l'intérieur de FB.connexion.
Méthode 2:
Alternativement, à l'aide de FB bouton de connexion plugin, vous pouvez vous abonner à
auth.statusChange
et de vérifier l'état de l'utilisateur dans la réponse.Remarque si vous utilisez fb bouton de connexion plugin, et que l'utilisateur est déjà connecté et relié à l'application, pas de bouton de connexion est indiqué (à lire dans la documentation ici)
Je vous suggère de laisser Facebook faire le gros du travail pour vous.
Veuillez noter que certains changements: 1. channelUrl spécifié, 2. l'utilisation de FB.getLoginStatus 3. suppression de la définition d'un cookie. 4. changement de l'événement à écouter (ainsi dans le cas où ils se connectent dans une autre fenêtre, ou deauth votre app ailleurs, etc )
Lorsque vous initialiser le FB SDK avec
status:true
il va chercher l'état de connexion de l'utilisateur et de les stocker. À partir de ce point lorsque vous faites des appels àFB.getLoginStatus()
il n'est pas d'accéder à récupérer les données les plus récentes de FB, mais est plutôt référence à la stockés localement variables qui ont été mis au point deFB.init()
- je pense que son seul actualisée une fois toutes les 20 minutes (voir https://github.com/facebook/facebook-js-sdk/commit/5b15174c7c9b9ea669499804d4a4c7d80771b036) - cependant, vous pouvez forcer le rafraîchissement en faisant ceci:Il devrait mettre le feu à votre
auth.login
événement ou vous pouvez simplement passer le gestionnaire de défini pour cet événementFB.getLoginStatus
.Pouvez même aller à un ensemble plus loin et balayage cette fonction comme:
Changement de statut": true," statut": false," et je crois qu'il va faire ce que vous voulez. Le problème est le statut : true rend la vérification de l'état se produire sur init, donc il n'y a rien à changer lorsque l'utilisateur clique sur le bouton.
Trouvé la réponse sur l'avant-dernier commentaire ici: http://www.bubblefoundry.com/blog/2011/03/the-facebook-login-button-and-logging-into-your-webapp/
Vous avez besoin de remplacer
avec
Comme auth.authStatusChange événement déclencheur de changement de statut s'est déjà connecté ou vous connecter en donnant des informations d'identification.
grâce
Cela fonctionne: