一些背景知识:
问题:
在我的服务器路由器中,我有中间件,可以确保用户在请求某些内容时登录,即:
function isLoggedIn(req,res,next){
if(req.isAuthenticated()){
return next();
}
res.render('index.ejs');
};
用于以下路线:
app.get('/SomethingForLoggedUsers', isLoggedIn, function(req,res){...
我的问题是,如果用户在网站上(由Angular路由器处理的部分)并且他们的会话已过期res.render('index.ejs');
不起作用。我的感觉是角度路由与index.ejs没有显示的事实有关,但我没有设法解决问题。有什么建议吗?
答案 0 :(得分:1)
您的解决方案的问题在于,使用angular,用户可能正在进行一些客户端操作而不是在服务器上发出请求。
在角度方面,我已经看到了解决这个问题的两种常见方法:
在客户端完全处理这个问题,有一个开源的ng-idle指令可以帮助解决这个问题。当用户在客户端上超时时,您可以使用护照
将其登出应用程序在服务器的支持下处理此问题,有一个开源的angular-http-auth模块,可以帮助处理来自服务器的HTTP 401/403。这意味着您的代码可以:
function isLoggedIn(req,res,next){
if(req.isAuthenticated()){
return next();
}
res.writeHead(401);
res.end();
};
我希望这些信息可以帮助您了解Angular的可能性。
答案 1 :(得分:0)
以下是我解决问题的方法。
在我的角度控制器中,我有:
$http.get('/SomethingForLoggedUsers').success(function(data) {
if(!data.user)$window.location.href="/login";
并且在服务器中,每次未记录用户时返回user:null,即:
function isLoggedIn(req,res,next){
if(req.isAuthenticated()){
return next();
}
res.json({user:null});
};