【发布时间】:2013-06-10 06:50:51
【问题描述】:
我开始尝试使用 ExpressJS + AngularJS,但我遇到了压力。
我的目标是拥有一个登录页面和一个仪表板页面,并使用 Passport + MongoDB 对用户进行身份验证,如果凭据正确,将他重定向到仪表板页面。
我从 angular-express-seed 开始并对其进行了修改,因此我最终得到了前面提到的视图:
$routeProvider.
when('/login', {
templateUrl: 'partials/login',
controller: 'LoginCtrl'
}).
when('/dashboard', {
templateUrl: 'partials/dashboard',
controller: 'DashboardCtrl'
}).
otherwise({
redirectTo: '/login'
});
我为每个部分视图提供服务:
app.get('/partials/:name', routes.partials);
exports.partials = function (req, res) {
var name = req.params.name;
res.render('partials/' + name);
};
除了我可以直接访问仪表板的部分(根本不需要登录)之外,登录系统工作正常。
所以我想在授予他访问仪表板(或任何其他区域)的访问权限之前,我需要确定用户是否经过身份验证。
我发现这个可以解决问题:
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login');
}
我会在每个GET 上调用它来部分
app.get('/partials/:name', ensureAuthenticated, routes.partials);
这里最大的问题是登录视图也是局部的,我不希望ensureAuthenticated 在请求视图时运行。
当前在每个部分请求上调用 ensureAuthenticated 会使任何浏览器崩溃,没有任何错误。
到目前为止我尝试过的(但没有奏效):
function ensureAuthenticated(req, res, next) {
if ( req.route.params.name !== 'login' && req.isAuthenticated() ) { return next(); }
res.redirect('/login');
}
还尝试使用自己的app.GET 调用登录视图,而不使用ensureAuthenticated,但不知何故,Angular 会关闭,甚至无法加载。
关于如何解决这个问题的任何想法?
提前致谢。
【问题讨论】:
标签: angularjs node.js authentication express passport.js