ExpressJs不保护/跳过受保护的文件

时间:2017-04-21 13:36:57

标签: javascript express authentication cookies

我创建了一个简单的身份验证系统。用户提交用户名,路由检查用户是否存在于数据库中,如果是,则为用户分配签名的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'));
});

1 个答案:

答案 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'));
});