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

相关问题