如何在ExpressJS中使用会话?

时间:2013-11-29 21:37:26

标签: node.js express

据我了解,我只能在请求中使用会话,例如:

app.get('/', function (req, res) {
    if (req.session.log_in)
        res.render('index.html', config);
    else
        res.render('authorization.html', config);
});

但是,如果我有20条或更多路线,那么我需要在每条路线上编写授权检查?是否存在像php这样的会话全局的东西,我可以在所有路线之前检查会话并确定并决定后续行动?

2 个答案:

答案 0 :(得分:3)

Express允许为该路由调用中间件的中间参数。使用Passport之类的授权系统,并将其命名为this

app.get('/account', ensureAuthenticated, function(req, res){
  res.render('account', { user: req.user });
});

答案 1 :(得分:0)

我们可以使用快速会话包管理ExpressJS中的会话。如果您在共享资源中运行它,则需要使用Redis或其他东西来保持一致。

Server.js

var express = require('express');
var session = require('express-session');
var bodyParser = require('body-parser');
var app = express();

app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);

app.use(session({secret: 'ssshhhhh'}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

var sess;

app.get('/',function(req,res){
sess=req.session;
//Session set when user Request our app via URL
if(sess.email)
{
/*
* This line check Session existence.
* If it existed will do some action.
*/
res.redirect('/admin');
}
else{
res.render('index.html');
}
});

app.post('/login',function(req,res){
sess=req.session;
//In this we are assigning email to sess.email variable.
//email comes from HTML page.
sess.email=req.body.email;
res.end('done');
});

app.get('/admin',function(req,res){
sess=req.session;
if(sess.email)
{
res.write('
<h1>Hello '+sess.email+'</h1>
');
res.end('<a href="+">Logout</a>');
}
else
{
res.write('
<h1>Please login first.</h1>
');
res.end('<a href="+">Login</a>');
}

});

app.get('/logout',function(req,res){

req.session.destroy(function(err){
if(err){
console.log(err);
}
else
{
res.redirect('/');
}
});

});
app.listen(3000,function(){
console.log("App Started on PORT 3000");
});

在此处阅读完整教程:http://codeforgeek.com/2014/09/manage-session-using-node-js-express-4/