3

我正在開發一個NodeJS和AngularJS的Web應用程序,這是一個PageTab應用程序到Facebook。節點Passport-Facebook登錄Facebook頁面選項卡應用程序

對於登錄,我正在使用庫Passport-facebook

我中間件是:

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

申請工作,如果我是Facebook上的標籤外,但是當我試圖進入Facebook標籤, 我得到一個錯誤:

[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. 

因爲facebook permission dialog無法從iFrame啓動

我該如何解決,保持會話管理與護照策略?

+1

出於安全原因,登錄對話框無法顯示在任何類型的(i)框架中 - 必須在頂層窗口實例中調用登錄對話框如果您使用的框架確實不提供方法實現這一點,那麼我認爲你唯一的選擇是在觸發登錄之前(使用'top.location.href =「...」')在頁面標籤頁中跳出iframe,在頂層窗口實例中登錄,然後重定向之後回到頁面標籤地址。 – CBroe 2014-09-25 11:47:30

+0

謝謝,我也做了,所以我希望這是一個很好的解決方案:) – jay 2014-09-25 12:55:59

回答

1

在最後我做了什麼:

  • 當用戶沒有登錄,而不是res.redirect( 「/認證/臉譜」);我做了res.render(「授權」);
  • authorize.html的網頁我有window.top.location = window.location + "auth/facebook";
  • 的,而不是Passport.authenticate("facebook", { successRedirect: "/", failureRedirect: "/login" })我做Passport.authenticate("facebook", { successRedirect: appHomePage, failureRedirect: appHomePage })appHomePage設置爲Facebook應用程序的絕對URL(如https://apps.facebook.com/8480657996/

注意,它使用的環境瓦爾來是有用的在您的應用程序中對應用程序主頁進行硬編碼

+0

謝謝!您的反饋對我很重要,讓我的應用程序在選項卡中工作,這要歸功於您:) – ghuroo 2017-02-18 00:59:55

相關問題