Новый сеанс /Cookie для каждого пользователя в экспрессе

Я использую экспресс для вызова API на платформе электронной коммерции. API использует сеансы для обработки постоянных данных, необходимых для пользовательских задач, таких как учетные записи и записи корзины. Информация о корзине и учетной записи прикреплена к сеансам (и файлам cookie, в которых хранится идентификатор сессии), поэтому, когда я вхожу в систему с помощью User1 и создаю корзину с товарами, а затем выходу из системы, корзина сохраняется. Однако при входе в систему с помощью User2 они наследуют корзину User1, поскольку она присоединена к сеансу.

EDIT / UPDATE

Основной app.js:

    var nodemailer      = require("nodemailer"),
    request         = require("superagent"),
    flash           = require("connect-flash"),
    bodyParser      = require("body-parser"),
    session         = require("express-session"),
    cookieParser    = require("cookie-parser"),
    methodOverride  = require("method-override"),
    Schema          = require("schema-client"),
    express         = require("express"),
    nodeuuid        = require("uuid"),
    cors            = require("cors"),
    app             = express();


app.use(session({
    name: "X-Session",
    secret: "randomstring",
    resave: false,
    saveUninitialized: false, 
    cookie: {
        maxAge: 60*60*1000,
        secure: false
    }

}));

app.use(bodyParser.urlencoded({extended:false}))
.use(cookieParser())
.set("view engine", "ejs")
.use(express.static(__dirname + "/public"))
.use(methodOverride("_method"))
.use(flash())

var client = new Schema.Client("clientname", 'privateKeyhere');

var SchemaAPI = "https://clientname:privatekey@api.schema.io";


app.use(function(req, res, next){
    res.locals.success = req.flash("success");
    res.locals.errors = req.flash("error");
    res.locals.account = req.session.account;
    res.locals.session = req.session;
    res.locals.cart = req.session.cart;
    if(req.session.account_id){
        client.get("/accounts/{id}", {
            id: req.session.account_id
        }, function(err, account){
            if(account){
                req.account = account;
                res.locals.account = account;
            };
            next();
        });
    } else {
        next();
    }
});

Вход в систему:

app.post("/login", function(req, res, next) {
request
    .post('http://localhost:3001/v1/account/login')
    .set('X-Session', req.session.id)
    .set('Accept', 'application/json')
    .send({
            email: req.body.email,
            password: req.body.password
        })
    .end(function (error, account){
        if(account){
            account = account.body;
            req.session.account = account;
            console.log(account.name + " - " + account.id);
            console.log(req.sessionID);
            req.flash("success", "Logged in, " + account.email + ".");
            res.redirect("/index");
        } else if(account == null){
            req.flash("error", "Your username or password is incorrect. Try again or <a href='/register'> sign up here</a>");
            res.redirect("login");
        } else {
            console.log(error);
            res.redirect('login');
        }
    });

});

У всех моих других маршрутов приложения есть заголовок "X-Session", который передается с каждым запросом.

Как я могу создать один сеанс для каждого пользователя, чтобы при входе в систему извлекался его сеанс вместе с любой информацией о корзине, связанной с его сеансом? Я использую экспресс-сессию для генерации sessionID, а затем передаю этот идентификатор в API. Заранее спасибо за помощь.

0 ответов

Другие вопросы по тегам