0

セッションとユーザー認証を使用して単純な 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);

ここで、サーバーが起動してから作成されたすべてのセッションを列挙し (セッションの永続性は求めていません)、その内容を調べたいと思います。どうすればいいですか?

4

2 に答える 2

4

使用しているセッション ストアによって異なります。保存されているすべてのセッションを取得するためのメカニズムを提供するために、セッション ストアは必要ありません。

ただし、デフォルトのConnect メモリ内セッション ストア(本番環境では使用しないでください) は、すべてのセッションを取得できる .all 関数を提供します。

sessionStore.all(function(err, sessions) {
    // if err handle err
    // iterate over sessions array
});
于 2013-08-13T06:54:53.677 に答える
1

RedisExpress でサポートされている一般的なセッションを使用している場合、これはhereに実装されているため、メソッドを呼び出すだけで、redisStore.all次のような promise を実行できます。

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);
            })
//...
于 2017-09-20T12:45:29.303 に答える