Новый сеанс /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. Заранее спасибо за помощь.