我一直在MEAN项目中使用express-sessions
(https://www.npmjs.com/package/express-sessions)和angular-route
来管理用户登录/身份验证。用户登录或注册后,会将其用户数据(例如整个User
)分配给会话,然后将用户重定向到新页面:#!/dashboard
。
为了防止用户在没有首次注册或登录的情况下访问#!/dashboard
,我会从我的角度控制器快速进行“会话检查”,它会传递到角度工厂,快速ping服务器端检查会话对象。
如果会话存在,我返回一个布尔值true
,如果一个会话不存在,我发送一个布尔值false
。然后我做一个条件语句:如果为true,继续在#!/dashboard
页面上继续抓取帖子或用户数据等(用户的会话有效)。如果为false,则重定向到存在登录页面的/
(阻止用户访问#!/dashboard
)。
这实现了我的目标,即防止用户现在在他们的浏览器中输入/#!/dashboard
而没有登录/注册,但这似乎是一个昂贵的解决方案,而且不是很干净。
是否有更简洁或更好的方法来执行此“会话检查”以阻止在没有有效登录会话的情况下访问我的后端页面?
我在某种程度上使用了快速中间件,也许有办法快速检查每个请求?
有没有人对如何改进会话检查有任何建议?
答案 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)