Var*_*ngh 8 session middleware node.js express
我在加载所有页面之前尝试使用authenticateUser()中间件.而不是在每个调用中包含它(如在app.get('/',authenticateUser,function()...)),我尝试在调用app.use(app.router)之前使用app.use(authenticateUser)进行设置).
但是,这没有用.authenticateUser基本上是:
if (req.session.loginFailed) {
next()
else {
if (req.session.user_id) {
...
if (userAuthenticated) {
next();
} else {
req.session.loginFailed = true;
console.log('setting loginFailed to true');
res.redirect('/login');
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在app.get('/ login')中我将req.session.loginFailed设置为false;
这应该工作,但我只想在app.get()或app.post()等上为我的一个实际页面调用它.我认为很多时候它会被许多不同的请求调用(因为在加载一个页面时,'设置loginFailed为true'被多次调用)
有一个更好的方法吗?或者我应该只是在我网站上的每个页面之前调用它?
ale*_*lex 10
在我看来,你做的太多了.只有一条路由应该处理用户登录(检查用户和传递,并在会话中存储用户名,如果成功),您应该仅在需要auth(不是全部)的路由上分配auth中间件.
我举了一个简单的例子,你可以理解我的观点:
登录路线
app.post('/login', function (req, res) {
var variables_set = (req.body.user && req.body.pass);
if (variables_set && (req.body.user === 'username') && (req.body.pass === 'password')) {
req.session.username = req.body.user;
} else {
res.redirect('/login?failed=true');
}
});
Run Code Online (Sandbox Code Playgroud)
身份验证中间件
if (!req.session.username) {
res.redirect('/login');
} else {
next();
}
Run Code Online (Sandbox Code Playgroud)
您可以在Alex Young的Nodepad应用程序中看到更完整的示例:https://github.com/alexyoung/nodepad(该应用程序的教程:http://dailyjs.com/tags.html#lmawa )
| 归档时间: |
|
| 查看次数: |
14626 次 |
| 最近记录: |