【发布时间】:2016-02-18 09:14:38
【问题描述】:
我试图弄清楚身份验证逻辑应该存在于我的应用程序中的哪个位置,我试图采取的方法是让服务器处理任何身份验证责任,重定向到与主客户端分开的登录页面侧应用程序 - 我认为这是明智的?
我有一个 angularjs 应用程序,它使用 ui-router 并发出通过服务器路由的 api 请求。
我正在使用配置为使用几个目录的 Express 服务器,如下所示:
app.use(express.static('./dist/client'));
app.use(express.static('public'));
然后我有中间件来执行身份验证检查(我也使用 express-session)并在需要时重定向到登录。
//A request to '/login' will serve the login page
app.use('/login', function(req, res){
res.sendFile(path.join(__dirname+'/public/login.html'))
});
//This will listen for all requests
app.use(function(req, res, next) {
if (req.url!== '/auth/login' && !req.session.accessToken) {
res.redirect('/login');
return;
}
next();
});
在初始页面加载时,当不存在会话 cookie 时,express 立即按预期重定向到登录视图。
登录并加载主应用程序后,如果我随后手动删除浏览器中的 cookie 并执行需要 api 请求的状态更改(在状态解析中),服务器将返回登录视图,但这会在内部呈现ui-router 正在使用 ui-view 组件,而不是服务器完全重定向到 /login。
另外,如果我导航到一个不执行 api 请求的页面(在删除 cookie 之后),该页面会被返回,我猜它没有被我的执行重定向的 app.use 中间件覆盖。
我觉得我在这里遗漏了一些明显的东西,有人可以帮我吗?
【问题讨论】:
标签: angularjs express angular-ui-router