Я использую облачные функции Firebase с Express и хостингом Firebase для обслуживания своего многостраничного сайта. Я успешно реализовал файлы cookie на стороне сервера, как описано здесь и как реализовано ниже:
function verifyLogin(request, response, next) {
const sessionCookie = request.cookies.__session || '';
firebase.auth().verifySessionCookie(sessionCookie, true /** checkRevoked */ )
.then((decodedClaims) => {
//serve content for user
return next();
}).catch(error => {
// Session cookie is unavailable or invalid. Force user to log in.
console.log(error);
response.redirect('/login');
return;
});
}
app.get('/', verifyLogin, (request, response) => {
var page_title = "Home";
response.render('index', {
page_title,
});
});
Я использую Firebase Web SDK (JavaScript) для доступа к Firebase Cloud Firestore. Для этого мне нужно получить idToken на стороне клиента для текущего пользователя, вошедшего в систему, например:
firebase.auth().onAuthStateChanged(firebaseUser => {
if (firebaseUser) {
firebase.auth().currentUser.getIdTokenResult()
.then((idTokenResult) => {
// Access the Firebase Cloud Firestore here
});
}
});
Это кажется мне избыточным, поскольку я уже знаю, какой пользователь вошел в систему через мой сервер cook ie, но как еще я могу получить idToken без другого вызова Firebase Auth?
Есть ли способ каким-то образом экстраполировать его из моего сеанса cook ie и передать его мой клиент из моей облачной функции в качестве переменной?
Или есть другой способ взглянуть на это с философской точки зрения, на который я не обращаю внимания?