【发布时间】:2013-07-22 07:07:08
【问题描述】:
我的应用在 NodeJS、ExpressJS 和 AngularJS 上运行。我正在尝试使用 PassportJS 进行 Facebook 身份验证。为了避免发布一堆不必要的代码,我们假设 Passport 代码按预期工作并登录 Facebook,获取令牌并收到响应。
在 ExpressJS 中,我的路线设置如下:
app.get('/', routes.index);
app.get('/fbauth', passport.authenticate('facebook', { scope: 'email' }));
app.get('/fbauthed', passport.authenticate('facebook',{ failureRedirect: '/' }), routes.loggedin);
app.get('/logout', function(req, res) {
req.logOut();
res.redirect('/');
});
我的服务器设置在localhost:3000。
问题
我的问题是 Angular 根本没有这样做。当我在我的页面上放置一个指向href="/fbauth" 的链接(这指向localhost:3000/fbauth)时,我看到地址栏瞬间变为localhost:3000/fbauth,然后我的主localhost:3000 页面重新加载。
但是,如果我在地址栏中输入 localhost:3000/fbauth,则会进行身份验证,并且我会被传递到 facebook -> localhost:3000/fbauthed。
我认为这是因为 Angular 路由试图“接管”<a> 链接中的 URL,但我不知道如何实现它.我尝试将我的 Angular 路由配置为:
when('/fbauth', {
redirectTo: '/fbauth'
}).
但这会加载一个空白屏幕。如何让两者协同工作?
【问题讨论】:
-
查看
$location服务docs.angularjs.org/guide/dev_guide.services.$location 文档中的“HTML 链接重写”部分。它详细介绍了如何阻止 Angular 覆盖 url
标签: javascript angularjs node.js express passport.js