我正在尝试使用会话和用户身份验证编写一个简单的nodejs服务器。 这是代码:
var express = require('express'),
app = express(),
fs = require('fs'),
passport = require('passport'),
jade = require('jade'),
BasicAuthStrategy = require('passport-http').BasicStrategy,
webRootDir = __dirname + '/web',
templatesDir = __dirname + '/templates/';
passport.use(new BasicAuthStrategy(
function (username, password, cb) {
"use strict";
cb(null, username);
}
));
app.use(express.logger());
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({secret: 'd6151b7e-8997-4187-a95e-29ce08450094'}));
app.use(passport.initialize());
app.use(passport.authenticate('basic', { session: false }));
app.use(express.favicon());
app.use(app.router);
app.use(express['static'](webRootDir));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
app.set('view engine', 'jade');
app.engine("jade", jade.__express);
app.get('/', function (req, res) {
"use strict";
res.render(templatesDir + 'index', {
user: req.user
});
});
app.listen(8080);
现在我想枚举自服务器启动以来创建的所有会话(我不是在寻求会话持久性)并检查它们的内容。我该怎么做?
答案 0 :(得分:3)
这取决于您正在使用的会话存储。会话存储不需要提供获取所有存储会话的机制。
但是,默认Connect in-memory session store(which you should not use in production)提供了.all功能,可以让您获得所有会话。
sessionStore.all(function(err, sessions) {
// if err handle err
// iterate over sessions array
});
答案 1 :(得分:1)
如果您使用支持Express的热门Redis
会话,则会实现here,因此您只需调用redisStore.all
方法,这样您就可以做出承诺
WebApp.prototype.allSessions = function() {
var self=this;
return new Promise((resolve, reject) => {
self.store.all((error, results) => {
if( error ) return reject(err);
else return resolve(results);
});
});
}//allSessions
会话由Redis支持
self.store=new RedisStore(redisConfig); // session store
// express session options
var sessionOptions={
store: self.store,
secret: oauthConfig.secret,
cookie: {
/** when the session gonna expire */
expire: new Date( Date.now() + self._options.session.expiresInMsec ),
/** how long the session lasts [ms]*/
maxAge: self._options.session.expiresInMsec
},
resave: false, // avoid race conditions
saveUninitialized: false // avoid race conditions
}
您可以在每次登录时枚举实时会话,如:
var oAuthStrategy = new OAuth2Strategy(oAuthOptions, function(accessToken, refreshToken, profile, done) {
self.allSessions()
.then(results => {
console.log(results);
})
//...