用户使用Passportjs从Angularjs(http get / resource)进行身份validation

我试图用Angular的Passportjs和expression。 我正在尝试在passportjs中testingfacebook策略。

身份validation似乎成功,但不会导航到callbackURL。 这个剧本挂了。

Firebug控制台显示:GET http:// localhost:7000 / auth / facebook 302 Moved Temporarily

它然而,当我手动点击这个url,但不会自动redirect在浏览器窗口中成功打开callbackurl(索引)

我的login视图(玉)看起来如下:

a(href='/auth/facebook') p Login 

而服务器端路由是:

 app.get('/auth/facebook', passport.authenticate('facebook')); app.get('/auth/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/login' }), function(req, res) { res.render('index'); }); 

请帮助。 这是我第一次使用Angularjs&Node js

编辑 :更确切地说,这个问题只发生在我的请求是从客户端(Angular的login页面)到我的快递服务器。 如果我从快递内部提供login页面,则不存在任何问题。 authentication通过,并按预期重新导向到我的应用程序。

当服务器使用passportjs处理身份validation时,我们能不能从客户端(使用http get / post)向服务器发送身份validation请求?

我目前正在尝试做同样的事情,遇到问题,但也许我可以澄清一些事情,并提出一些build议。

在幕后,PassportJS的Facebook战略正在使用OAuth。 通过使用这种方法,它将所有的身份validation卸载到Facebook的服务器上。 当您点击一个带有href =“/ auth / facebook”的链接时,您的快递服务器会将用户redirect到Facebook,然后再返回到您的应用程序。 必须这样做才能确保安全的身份validation,否则有人可能会声称自己是Facebook并“自我authentication”用户。 这也是为什么调用Angular $ http.get(“/ auth / facebook”)不起作用,它只是返回一个302redirect。

不幸的是,这是它的挑战性。 如果你仅仅包含一个href“/ auth / facebook”的链接,服务器将authentication用户并返回到你的应用程序,但是Angular没有办法知道你的用户已经被authentication了。 我在https://github.com/enginous/angular-oauth发现了一个angular-oauth的例子,但是在消化它的时候遇到了一些麻烦。 从本质上讲,他使用popup窗口打开身份validation链接,在你的情况下“/ auth / facebook”,并使用浏览器$ window.postMessage与他的主应用程序窗口与他一旦用户通过身份validation然后closurespopup窗口。

我认为这可能是最好的方法,但我还没有得到这与护照工作。 愿意听到一些其他的想法/意见,因为我仍然对Angular也是新的!

更新:我最近遇到这个博客文章http://www.frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/显示了一个使用Passport的Facebook战略与Angular的例子。 他似乎在成功validation后设置cookie,并在加载页面时对Cookie进行angular度轮询。 这可能是更简单的解决scheme。

我遇到了同样的问题,问题是angular度如何发送请求。 我开始使用$http.get ,它到达了我的节点服务器,但正如你所说,挂在那里。 当我切换到$window.location.href它完美的工作,因为这个要求可以链接。