我的应用程序在 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'
}).
但这会加载一个空白屏幕。我怎样才能让两者一起工作?