node.js экспресс-проверка сеанса Azure Store после сбоя приложения

Я настроил экспресс-сеанс в моем приложении узла для использования таблицы хранилища Azure (connect-azuretables), и он работает частично. т.е. когда пользователь входит в систему, я могу захватить идентификатор пользователя и установить его для сеанса, пока пользователь не закрывает браузер, сеанс действителен. Я также могу хранить его в лазурном магазине.

Во время входа в систему я также сохраняю этот сеанс в глобальном массиве в приложении узла. В промежуточном программном обеспечении я проверяю, есть ли у входящего запроса допустимый сеанс для значений в этом массиве. Это работает до тех пор, пока приложение не разбилось или не перезапустилось. После перезапуска глобальный массив становится пустым, и сеанс больше не может быть аутентифицирован.

У меня проблема в том, что я не знаю, как проверить действующие сеансы в лазурном хранилище. Я пробовал такие методы, как 'req.session.get', и получил сообщение об ошибке 'TypeError: req.session.get не является функцией'

Вот соответствующий код:

const redirectToLogin = (req, res, next) => {


   if(!req.session.userId){
      res.redirect(302, '/getstarted.html');
   } else {
      next();
   }
}

const redirectToDashboard = (req, res, next) => {

   if (req.session.userId && req.session.key) {     // user already logged in, go to dashboard

      // improve upon this to check for validity better
      res.redirect(302, '/dashboard/'); 
   } else {
      next();
   }
}


app.use((req, res, next) => {

    const { userId, key } = req.session;

    if (userId && key) {    // here if we find userId, then we inject it into res.locals so it can be accessed by every route.

                    // improve upon this to also check for key and validity
        res.locals.user = arrLoggedInUsers.find (
            user => user.UserId === userId
        )        

            // if a match was not found in arrLoggedInUsers, then also check azure store before rejecting
            // coz request had session info.
        if(typeof res.locals.user === 'undefined'){

            // I can't find a working example of how to do this part
        }

   }

   next()
});

app.post('/signin', function(req,res){

    // verify login, then assign appropo values to session

    req.session.userId = userId;
    req.session.key = sessionKey; 

    req.session.save(function(err) {
        if(err)
          logger.errorLog(func_id + "Error - " + err);
        // session saved

        return res.redirect(302, "/dashboard/");
    })

})

app.get('/dashboard/', redirectToLogin, function(req, res) {

   handlePageForLoggedInUser("home.html", req, res);
});

Я просмотрел несколько руководств по экспресс-сеансу и собрал то, что почти не работает. Первое, что у меня возникло с трудом, - это как проверить в хранилище Azure, действителен ли сеанс?

Во-вторых, следует ли мне кэшировать сведения о сеансе из хранилища Azure в память и использовать память в первую очередь для повышения производительности или проверять с помощью хранилища Azure при каждом контакте правильный способ сделать это.

0 ответов

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