1

次のコードがあります。

// Setup express middleware
app.configure(function () {
    app.use('/css', express.static(__dirname + '/public/css'));
    app.use('/js', express.static(__dirname + '/public/js'));
    app.use('/img', express.static(__dirname + '/public/img'));
    app.set('views', __dirname + '/views');
    app.set('view engine', 'ejs');

    app.use(cookieParser);
    app.use(express.bodyParser());
    app.use(express.cookieSession({
        cookie: {
            maxAge: 86400000
          , signed: true
        }
    }));
    app.use(express.session({
        store: new RedisStore({host: "localhost", pass: "--", client: redis_client}),
        secret: '--'
    }));
    app.use(express.csrf());
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(app.router);
});

app.get('/', function(req, res) {
    if (req.user) {
        res.redirect('/home');
    } else {
        res.redirect('/login');
    }
});

app.post('/login',
    passport.authenticate('local'),
    function(req, res) {
        console.log('login: ' + JSON.stringify(req.session));
        req.session.cookie.expires = false;
        req.session.cookie.maxAge = false;

        console.log('after: ' + JSON.stringify(req.session));
        res.redirect('/home');
    }
);

app.get('/login', function(req,res) {
                                                                                                        app.render('login', { welcome_msg: "TRR NANA", csrf_token: req.session._csrf}, function (err, html) {
        if (err) {
            logger.warn(err);
            return;
        }
        res.send(html);
    });
});

app.get('/home', ensureAuthenticated, function(req, res){
    console.log('home:' + JSON.stringify(req.session));
    app.render('home', { user: req.user}, function (err, html) {
        if (err) {
            logger.warn(err);
            return;
        }
        res.send(html);
    });
});

function ensureAuthenticated(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    }
    res.redirect('/login');
}

コンソールの出力は次のとおりです。

login: {"_csrf":"44CcIZ3kL2hkOpECrGnNF-GD","passport":{"user":18},"cookie":{"originalMaxAge":86400000,"expires":"2013-09-02T22:00:17.936Z","httpOnly":true,"path":"/"}}
after: {"_csrf":"44CcIZ3kL2hkOpECrGnNF-GD","passport":{"user":18},"cookie":{"originalMaxAge":false,"expires":false,"httpOnly":true,"path":"/"}}
home:{"_csrf":"44CcIZ3kL2hkOpECrGnNF-GD","passport":{"user":18},"cookie":{"originalMaxAge":86400000,"expires":"2013-09-02T22:00:17.949Z","httpOnly":true,"path":"/"}}

問題は、リダイレクト後に Cookie の有効期限と maxAge が異なるのはなぜですか?

Express maxAge 8640000 を使用するときに maxAge と有効期限を false に設定する理由を尋ねるかもしれません。その答えは、現在のログイン ルート内のコードはテスト用であり、デフォルトで Cookie が 1 日で期限切れになり、ユーザーがブラウザ セッションの終了時に Cookie の有効期限が切れるチェックボックスをオンにします。

ただし、Cookie の maxAge と有効期限の両方を設定しても、ブラウザーに表示される Cookie の有効期限は変更されません。

4

0 に答える 0