Обработка истечения срока действия токена? - PullRequest
0 голосов
/ 15 февраля 2019

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

Работает до тех пор, пока не истечет токен id.На этом этапе происходит сбой, и я не могу найти способ использовать вновь созданный токен в качестве файла cookie.

1 Ответ

0 голосов
/ 15 февраля 2019

Теперь он работает следующим образом ..

Проверка подлинности бэкэнда:

function checkAuth(req, res, next) {
  if(!req.session.token)
  {
    return res.redirect("login");
  }
  else{
    admin.auth().verifyIdToken(req.session.token).then(function(decodedToken) {
      req.session.uid = decodedToken.uid
      next();
    }).catch(function(error) { // expired token
      return res.render("refreshToken");
    });
  }
}

refreshToken предоставлен клиенту:

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    firebase.auth().currentUser.getIdToken(true).then(function(idToken) {
        fetch("/refreshToken",{method: "POST",body:"newToken="+idToken, headers:{'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}}).then(function(response){
          if(response.ok){
              location.reload(true)
          }
        })
        .then(function(data){
          if(data.suc == 0){
            window.location.replace("/login");
          }
        });
    }).catch(function(error) {
    });
  }
  else{
    window.location.replace("/login");
  }

Back to backend:

app.post("/refreshToken", function(req, res){
  if(!req.session.uid) return res.send({suc:0});
  admin.auth().verifyIdToken(req.body.newToken || "").then(function(decodedToken) {
    if(req.session.uid == decodedToken.uid){
      req.session.token = req.body.newToken;
      return res.send({suc:1});
    }
  })
  .catch(function(error) {
      res.send({suc:0});
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...