Экспресс-сессия прекращает сохранять сессии через некоторое время - PullRequest
0 голосов
/ 12 июня 2018

У меня довольно неуловимая проблема, при которой экспресс перестает сохранять данные сеанса в хранилище сеансов (MongoDB) или в файле cookie на стороне клиента примерно через сутки безотказной работы.Перезапуск серверного API-сервера, по-видимому, решает проблему, но только на другой день или около того, а затем повторяется и должен быть перезапущен.

Приложение узла работает на Ubuntu 16, и я не могунайти любые сообщения журнала, относящиеся к проблеме.

Я вставлю нижеуказанный код входа в систему, который устанавливает данные сеанса,

router.post('/login', async function(req, res) {
var user_name = req.body.user_name;
var password = req.body.password;
var currentTime = new Date().getHours() + ":" + new Date().getMinutes();

if(user_name && password) { // If both the username and password were sent.
  User.findOne({"field_data.user_name": user_name}).select('password 
  field_data').then( async (user) => {
    if(!user) { // A record was not found.
      console.log(currentTime + " - Failed Login: " + user_name);
      var returnResult = {
        error: true,
        msg: "User Not Found."
      };
      res.json(returnResult);
    } else { // A record was found.
      console.log(currentTime + " - User Logged in: " + 
      user.field_data.first_name + " " + user.field_data.last_name);
      let result = await user.CheckCredentials(password);
      if(result) {
        var returnResult = {
          error: false,
          msg: "Logged In: " + user.field_data.first_name + " " + 
          user.field_data.last_name,
          data: {
            first_name: user.field_data.first_name,
            last_name: user.field_data.last_name,
            user_roles: user.field_data.user_role,
            id: user._id
          }
        };

        // Set session data which creates record in session store and client 
        // cookie.
        req.session.userId = user.id;
        req.session.userRoles = user.field_data.user_role ;
        req.session.userName = user.field_data.first_name + " " + 
        user.field_data.last_name;
        req.session.save(); // This line makes no difference.

      } else {
        var returnResult = {
          error: true,
          msg: "Invalid Credentials!"
        };
      }
      res.json(returnResult);
    }

  }).catch((e) => {
    console.log(e)
  });
} else {
  res.json({error: true, msg: "Invalid username/password!"});
}
});

1 Ответ

0 голосов
/ 12 июня 2018

Я думаю, что ваши сеансы maxAge s истекают.Я использовал Redis, вы можете внести изменения, как вы хотите

var express = require("express");
var session = require('express-session');

var sessionConfig = {
    secret: "your_secret",
    store: // new redisStore({ client: redis.getClient() }),
    resave: true,
    rolling: true,
    saveUninitialized: true,
    cookie: { maxAge: 30 * 60000 }
}

var app = express();
app.use(session(sessionConfig));

app.post('/somepath', (req,res,next)=>{
        // find your user or else 
        req.session.userData = {
            id : user.id,
            roles : user.field_data.user_role ,
            name : user.field_data.first_name
        }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...