Facebook JavaScript SDK ne définit pas le cookie token d'accès dans Chrome après l'appel FB.login

J'utilise le SDK JavaScript de Facebook pour implémenter la connexion pour mon site. J'ai déjà travaillé sur Safari et Firefox, mais pas sur Chrome.

Une fois que la méthode FB.login est appelée, je peux récupérer le jeton d'accès de Facebook, mais ce n'est pas configurer le jeton d'accès et l'ID utilisateur dans les cookies comme dans Firefox et Safari. À l'heure actuelle, je rédige manuellement le jeton d'accès et l'ID utilisateur dans les cookies, de sorte que le flux de connexion fonctionne, mais il me manque encore que le jeton d'accès n'est pas écrit uniquement sur Chrome.

Quelqu'un at-il rencontré cela avant et connais-je un problème? Très appréciée.

Voici mon code pour la logique d'init et de connexion:

window.fbAsyncInit = function() { FB.init({ appId : "#{AppConfig.facebook['app_id']}", // App ID status : true, // check login status cookie : true, // enable cookies to allow the server to access the session xfbml : true // parse XFBML }); // Additional initialization code here }; // Load the SDK Asynchronously (function(d){ var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; if (d.getElementById(id)) {return;} js = d.createElement('script'); js.id = id; js.async = true; js.src = "//connect.facebook.net/en_US/all.js"; ref.parentNode.insertBefore(js, ref); }(document)); $(function() { $(".fb-login-button").click(function() { FB.login(function(response) { if (response.authResponse) { console.log("Welcome! Fetching your information..."); $.cookie("user_id", response.authResponse.userID); $.cookie("access_token", response.authResponse.accessToken); window.location = "#{oauth_facebook_callback_url}"; } else { console.log("User cancelled login or did not fully authorize."); } }, {scope: 'publish_stream,offline_access,email,user_events,create_event,user_location'}); }); }); 

Si vous testez votre application localement, notez que Google Chrome ne prend pas en charge les cookies pour les fichiers locaux (y compris l' localhost ), sauf si vous le lancez avec le drapeau des --enable-file-cookies . Toutefois, Chrome utilise des cookies si vous utilisez votre adresse IP locale – 127.0.0.1 – pour tester.

Vous pouvez consulter une discussion sur ce comportement ici: http://code.google.com/p/chromium/issues/detail?id=535

(Réponse modifiée de Pourquoi Chrome ignore les cookies jQuery locaux? )

Notez que le SDK JS stocke déjà la dernière ID de l'auditeur et access_token dans le cookie fbsr_APPID . Ce cookie sera mis à jour avec les dernières données chaque fois qu'un utilisateur utilise FB.ui , FB.login , FB.getLoginStatus avec force = true ou FB.init avec status: true .

Je recommande fortement d'utiliser cette méthode au lieu de stocker vos propres cookies, puisqu'il est signé avec la clé secrète de votre application, tout comme le paramètre sign_request . Vous devez suivre les instructions pour décoder, vérifier la signature, et si elle est valide, utilisez-la. Cela empêchera la falsification (mais ne peut pas empêcher les attaques de répétition à court terme).