我开始尝试使用 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 会关闭,甚至不加载。
关于如何解决这个问题的任何想法?
提前致谢。