Я работаю в режиме devMode с сеансами angularjs и express с промежуточным ПО cors, и я запускаю интерфейс с localhost: 4200 и бэкэнд с localhost: 8080
В запросе входа я установил пользовательские данные в сеансе, а затем, когда я вызываю «/ api / contacts», пользовательские данные сеанса не определены. Я попытался сохранить сеанс с помощью session.save (), но он не работает. Я заметил, что между вызовами изменяется идентификатор сеанса.
Я много часов искал в Google, но не нашел никакого решения.
это вызов внешнего интерфейса «/ api / contacts»
this.http.get(environment.apiUrl + '/api/contacts', {
withCredentials: true,
})
это часть сервера. js
app.use(cors({origin: [
"http://localhost:4200"
], credentials: true,
}));
let sess = session({
secret: 'my secret',
resave: false,
saveUninitialized: false,
store: new MemoryStore({
checkPeriod: 60000 * 5 // prune expired entries every 24h
}),
cookie: {
secure: app.get('env') === 'production'?true:false,
maxAge: 60000 * 5 ,
}
})
app.use(sess)
// Initialize the app.
var server = app.listen(process.env.PORT || 8080, function () {
});
const authMiddleware = (req, res, next) => {
// here req.session.user IS undefined
if(req.session && req.session.user) {
next();
} else {
res.status(403).send({
status: 403,
errorMessage: 'You must be logged in.'
});
}
};
app.get("/api/contacts", authMiddleware,(req, res) => {
// some code will run if authMiddleware pass
});
app.post('/api/login', validatePayloadMiddleware, (req, res) => {
if (req.body.username === "xx.xxxx@xxxx.xxx" && req.body.password === "xxxxxxx")
{
let user = {
id: req.sessionID,
username: req.body.username,
firstName: "Fabio",
lastName: "Spadaro",
};
req.session.user = user;
req.session.save((err) => {
console.log(err)
});
return res.status(200).json(user);
}
else
{
let body = {
error: true,
errorMessage: 'Permission denied!'
};
return res.status(403).json(body);
}
});