使用快速会话在MEAN应用程序中检查有效会话的最佳方法是什么?

时间:2017-03-06 05:46:00

标签: javascript angularjs node.js session mean-stack

我一直在MEAN项目中使用express-sessionshttps://www.npmjs.com/package/express-sessions)和angular-route来管理用户登录/身份验证。用户登录或注册后,会将其用户数据(例如整个User)分配给会话,然后将用户重定向到新页面:#!/dashboard

为了防止用户在没有首次注册或登录的情况下访问#!/dashboard,我会从我的角度控制器快速进行“会话检查”,它会传递到角度工厂,快速ping服务器端检查会话对象。

如果会话存在,我返回一个布尔值true,如果一个会话不存在,我发送一个布尔值false。然后我做一个条件语句:如果为true,继续在#!/dashboard页面上继续抓取帖子或用户数据等(用户的会话有效)。如果为false,则重定向到存在登录页面的/(阻止用户访问#!/dashboard)。

这实现了我的目标,即防止用户现在在他们的浏览器中输入/#!/dashboard而没有登录/注册,但这似乎是一个昂贵的解决方案,而且不是很干净。

是否有更简洁或更好的方法来执行此“会话检查”以阻止在没有有效登录会话的情况下访问我的后端页面?

我在某种程度上使用了快速中间件,也许有办法快速检查每个请求?

有没有人对如何改进会话检查有任何建议?

2 个答案:

答案 0 :(得分:1)

function secure_pass(req, res, next) {
    if (req.session.loggedIn || req.path==='/login') {
        next();
    } else {
       res.redirect("/login");
    }
}

如果session.loggedIn未设置为true,则此功能会将用户重定向到/login

现在将其作为中间件注入:

app.use(secure_pass);

现在,在上面一行之后的任何app.get("/", myfunc);现在将被保护"通过secure_pass功能。

当然,你也可以选择性地为某些路线注入中间件,而不是全部:

app.get("/", secure_pass, myfunc);

注意:以上是未经测试的代码。我只是快速地把它放在一起,为你提供一个方法的想法。

答案 1 :(得分:1)

如果您在前端使用AngularJS 2,则guards的概念可以保护您的路线免受未经授权的访问,但这只会处理您应用的角度部分;您还需要通过护照等模块保护您的Express应用程序。您还可以考虑使用令牌身份验证,而不是使用passportjwt的会话。我写了两篇关于如何使用passport和jwt从backfront两端验证您的平均应用程序的文章。