Node Passport-facebook accedi all’applicazione della scheda Pagina Facebook

Sto sviluppando un’applicazione web in NodeJS e AngularJS, ovvero un’applicazione PageTab su Facebook.

Per il login sto usando la libreria Passport-facebook .

Il mio middleware è:

passport.authenticate('facebook', { display: 'popup', scope: ['read_stream', 'publish_actions', 'email', 'user_photos'] }) 

L’applicazione funziona se sono fuori dalla scheda di Facebook, ma quando provo nella scheda di Facebook, ottengo un errore:

 [Error] Refused to display'Http....'in a frame because it set 'X-Frame-Options' to 'DENY'. (login, line 0) [Error] SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent. 

Poiché la facebook permission dialog non può essere avviata da un iFrame

Cosa posso fare per correggere, mantenendo la gestione delle sessioni con la strategia del passaporto?

Alla fine quello che ho fatto:

  • Quando l’utente non ha effettuato il login, invece di res.redirect (“/ auth / facebook”); Ho fatto res.render (“autorizza”);
  • nella pagina authorize.html ho window.top.location = window.location + "auth/facebook";
  • un invece di Passport.authenticate("facebook", { successRedirect: "/", failureRedirect: "/login" } ) Ho fatto Passport.authenticate("facebook", { successRedirect: appHomePage, failureRedirect: appHomePage } ) con appHomePage impostato su l’URL assoluto dell’app Facebook (ad es. https://apps.facebook.com/8480657996/

Si noti che è utile utilizzare le vars di ambiente per codificare con hard disk la home page dell’app nella propria app