node.js express проверка сеанса azure магазин после сбоя приложения - PullRequest
0 голосов
/ 29 мая 2020

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

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

Моя проблема в том, что я не знаю, как проверить хранилище azure на наличие действительных сеансов. Я пробовал такие методы, как 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);
});

Я прошел через несколько руководств по сеансу express и собрал то, что почти не работает. Первое, что у меня возникли проблемы с выяснением: как мне проверить хранилище azure на предмет допустимости сеанса?

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

...