Подтвердить что ты не робот

Как сохранить и получить сеанс из Redis

Я пытаюсь интегрировать сеансы Redis в мою систему аутентификации, написанную в Node.js.

Мне удалось успешно настроить сервер Redis, connect-redis и Express server.

Вот моя настройка (только важный бит):

var express = require("express");
var RedisStore = require("connect-redis")(express);
var redis = require("redis").createClient();

app.use(express.cookieParser());
app.use(express.session({
    secret: "thisismysecretkey",
    store: new RedisStore({ host: 'localhost', port: 6379, client: redis })
}));

Теперь... Как я могу создавать, читать и уничтожать сеанс? Я прочитал множество статей о том, как настроить connect-redis и много вопросов здесь, на SO, но я клянусь, что каждый останавливается только на конфигурации и не объясняет, как на самом деле использовать его...

Я знаю, что это, наверное, очень просто, но, пожалуйста, не занимитесь и просто объясните:).

4b9b3361

Ответ 1

Это должно быть все, что нужно. Вы получаете доступ к сеансу в обработчиках маршрута через req.session. Сеансы создаются, сохраняются и уничтожаются автоматически.

Если вам нужно вручную создать новый сеанс для пользователя, вызовите req.session.regenerate().

Если вам нужно сохранить его вручную, вы можете вызвать req.session.save().

Если вам нужно уничтожить его вручную, вы можете вызвать req.session.destroy().

См. документацию Connect для получения полного списка методов и свойств.

Ответ 2

Рассмотрим этот код.

var express = require('express');
var redis   = require("redis");
var session = require('express-session');
var redisStore = require('connect-redis')(session);
var bodyParser = require('body-parser');
var client  = redis.createClient();
var app = express();

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

app.use(session({
    secret: 'ssshhhhh',
    // create new redis store.
    store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl :  260}),
    saveUninitialized: false,
    resave: false
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

app.get('/',function(req,res){  
    // create new session object.
    if(req.session.key) {
        // if email key is sent redirect.
        res.redirect('/admin');
    } else {
        // else go to home page.
        res.render('index.html');
    }
});

app.post('/login',function(req,res){
    // when user login set the key to redis.
    req.session.key=req.body.email;
    res.end('done');
});

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");
});

Итак, вам нужно установить connect-redis и передать вам экземпляр express-session.

Затем в промежуточном программном обеспечении инициализируйте redisStore с такими данными сервера.

app.use(session({
    secret: 'ssshhhhh',
    // create new redis store.
    store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl :  260}),
    saveUninitialized: false,
    resave: false
})); 

Я ставлю ttl на 260, вы можете увеличить. После того, как TTL достигнет своих пределов, он автоматически удалит клавишу redis.

В маршрутизаторах вы можете использовать переменную req.session для SET, EDIT или DESTROY сеанса.

Еще одна вещь...

Если вы хотите, чтобы пользовательский cookie i.e не был таким же, как в вашем магазине Redis, вы можете использовать cookie-parser, чтобы установить секреты cookie.

Надеюсь, что это поможет.

ссылка: https://codeforgeek.com/2015/07/using-redis-to-handle-session-in-node-js/