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

在MEAN项目中,我一直使用express-sessions ( https://www.npmjs.com/package/express-sessions )和angular-route来pipe理用户login/authentication。 一旦用户login或注册,他们的用户数据(例如整个User )就被分配给一个会话,然后用户被redirect到一个新的页面: #!/dashboard

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

如果一个会话存在,我返回一个布尔值true ,如果一个会话不存在,我发送布尔值false 。 然后,我做了一个条件语句:如果为true,继续在#!/dashboard页面上(用户会话有效)继续抓取post或用户数据等。 如果为false,则redirect到/login页面所在的位置(防止用户访问#!/dashboard )。

这完成了我的目标,即防止用户在浏览器中进入/#!/dashboard ,而无需login/注册,但这似乎是一个昂贵的解决scheme,并不是很干净。

有没有一个更清洁或更好的方式来执行此“会话检查”,以防止没有有效的login会话访问我的后端页面?

我已经使用了快递中间件,也许有办法快速检查每个请求?

有没有人有任何build议,我可以改善我的会议检查?

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

这个函数注意,如果session.loggedIn没有被设置为true,那么用户被redirect到/login

现在注入它作为中间件:

 app.use(secure_pass); 

现在任何app.get("/", myfunc); 上面的行现在将通过您的secure_passfunction“保护”。

当然,你可以select性地为特定的路由注入中间件,而不是所有的:

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

注意:以上是未经testing的代码。 我只是把它放在一起,给你一个办法的想法。

如果你在前端使用AngularJS 2,那么守卫的概念就是保护你的路由免受未经授权的访问,但是这只能处理你的应用的angular色部分; 您还需要通过护照等模块来保护您的快速应用。 您也可以考虑令牌authentication,而不是使用护照和jwt的会话。 我写了两篇关于如何使用护照和jwt从后端和前端validation您的平均应用程序的文章。