Данные сеанса теряются с использованием express сеанса - PullRequest
0 голосов
/ 26 мая 2020

Я работаю в режиме 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);
  }
});
...