Теперь он работает следующим образом ..
Проверка подлинности бэкэнда:
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});
});
});