我创建了一个简单的身份验证系统。用户提交用户名,路由检查用户是否存在于数据库中,如果是,则为用户分配签名的cookie以访问所有其他路由。该系统用于保护所有其他路线;但是,保护服务索引文件的最终角度路径似乎存在问题。
在提供角度文件的app.use()
之前,我放置了一个中间件,如果没有用户cookie,它会重定向到登录页面。问题是如果你去localhost:3000没有正确的用户cookie,你会被发送到角度应用程序,但api路由上的保护已经到位并将被阻止。如果你去没有cookie的localhost:3000 / randomwords,你将被发送到用户登录页面。在我的应用程序流程中似乎有一些我缺少的东西。
那么我该如何正确保护角度路线,以便没有cookie的用户总是被发送到auth页面并且可以从那里登录。
此外,我甚至删除了角度路线,保存并重新启动了应用程序,它仍然提供角度应用程序。怎么可能??!
登录提交发布请求
module.exports.submitLoginForm = function(req,res, next){
let foundUser = User.findOne({'userName': userName});
foundUser
.then(user=>{
if(tester){
res.cookie('user', user._id, {signed: true})
res.redirect('/');
}
res.redirect('/auth/');
})
.catch(error=>{
console.log(error)
});
}
app.js
//how all other routes are protect in app.js (This works!)
authMiddleWare = function(req,res,next){
if (req.signedCookies['user']) {
next();
} else {
sendJSONresponse(res, 400, {err:"error"})
}
}
app.use('/api/info', authMiddleWare,infoApi);
//middleware and angular route
app.use(function(req, res, next) {
if (req.signedCookies['user']) {
next()
} else {
res.redirect('/auth/');
}
});
app.use(function (req, res, next) {
res.sendFile(path.join(__dirname, 'public/dist', 'index.html'));
});
答案 0 :(得分:0)
对于可能遇到此问题的任何人。在app.js文件的上方,我使用了标准
app.use(express.static(path.join(__dirname, 'public')));
提供静态文件。出于某种原因,这会导致express为Angular应用程序提供index.html文件,无论如何。我把它移到auth中间件下面,现在它可以工作了!
app.use(function(req, res, next) {
if (req.session.user) {
next()
} else {
res.redirect('/auth/');
}
});
app.use(express.static(path.join(__dirname, 'server/public/dist')));
app.use(function(req, res) {
res.sendFile(path.join(__dirname, 'server/public/dist', 'index.html'));
});