使用快速会话检查 MEAN 应用程序中有效会话的最佳方法是什么?
What's the best way to check for a valid session in a MEAN application using express-sessions?
我一直在 MEAN 项目中使用 express-sessions
(https://www.npmjs.com/package/express-sessions) 和 angular-route
来管理用户登录/身份验证。用户登录或注册后,他们的用户数据(例如整个 User
)将分配给会话,然后用户将被重定向到新页面:#!/dashboard
.
为了防止用户在未先注册或登录的情况下访问 #!/dashboard
,我从我的 angular 控制器快速执行了一个 "session check",它传递给angular 工厂,它快速 ping 服务器端以检查会话对象。
如果会话存在,我 return 一个布尔值 true
,如果会话不存在,我发送一个布尔值 false
。然后我做一个条件语句:如果为真,继续并在 #!/dashboard
页面上继续抓取帖子或用户数据等(用户的会话有效)。如果为 false,则重定向到存在登录页面的 /
(阻止用户访问 #!/dashboard
)。
这实现了我的目标,即防止用户现在在没有登录 in/registered 的情况下在浏览器中输入 /#!/dashboard
,但这似乎是一个代价高昂的解决方案,而且不是很干净。
是否有更简洁或更好的方法来执行此操作 "session check" 以防止在没有有效登录会话的情况下访问我的后端页面?
我使用过一些 express 中间件,也许有一种方法可以快速检查每个请求?
有人对我如何改进会话检查有什么建议吗?
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
函数 "secured"。
当然,您也可以有选择地只为某些路由而不是所有路由注入中间件:
app.get("/", secure_pass, myfunc);
注意:以上是未经测试的代码。我只是快速地把它放在一起,给你一个方法的想法。
如果您在前端使用 AngularJS 2,则有 guards to protect your routes from unauthorized access but this only handles the angular part of your app; you will need to protect your Express app as well through a module like passport. You may also consider token authentication instead of sessions with passport and jwt. I wrote 2 articles on how to authenticate your mean app both from the back and front ends using passport 和 jwt 的概念。
我一直在 MEAN 项目中使用 express-sessions
(https://www.npmjs.com/package/express-sessions) 和 angular-route
来管理用户登录/身份验证。用户登录或注册后,他们的用户数据(例如整个 User
)将分配给会话,然后用户将被重定向到新页面:#!/dashboard
.
为了防止用户在未先注册或登录的情况下访问 #!/dashboard
,我从我的 angular 控制器快速执行了一个 "session check",它传递给angular 工厂,它快速 ping 服务器端以检查会话对象。
如果会话存在,我 return 一个布尔值 true
,如果会话不存在,我发送一个布尔值 false
。然后我做一个条件语句:如果为真,继续并在 #!/dashboard
页面上继续抓取帖子或用户数据等(用户的会话有效)。如果为 false,则重定向到存在登录页面的 /
(阻止用户访问 #!/dashboard
)。
这实现了我的目标,即防止用户现在在没有登录 in/registered 的情况下在浏览器中输入 /#!/dashboard
,但这似乎是一个代价高昂的解决方案,而且不是很干净。
是否有更简洁或更好的方法来执行此操作 "session check" 以防止在没有有效登录会话的情况下访问我的后端页面?
我使用过一些 express 中间件,也许有一种方法可以快速检查每个请求?
有人对我如何改进会话检查有什么建议吗?
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
函数 "secured"。
当然,您也可以有选择地只为某些路由而不是所有路由注入中间件:
app.get("/", secure_pass, myfunc);
注意:以上是未经测试的代码。我只是快速地把它放在一起,给你一个方法的想法。
如果您在前端使用 AngularJS 2,则有 guards to protect your routes from unauthorized access but this only handles the angular part of your app; you will need to protect your Express app as well through a module like passport. You may also consider token authentication instead of sessions with passport and jwt. I wrote 2 articles on how to authenticate your mean app both from the back and front ends using passport 和 jwt 的概念。