Firebase: как получить идентификатор ID для зарегистрированного пользователя на стороне клиента, если я использую файлы cookie сеанса на стороне сервера? - PullRequest
0 голосов
/ 28 мая 2020

Я использую облачные функции 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 и передать его мой клиент из моей облачной функции в качестве переменной?

Или есть другой способ взглянуть на это с философской точки зрения, на который я не обращаю внимания?

1 Ответ

0 голосов
/ 28 мая 2020

Точно так же вы можете прослушивать изменения состояния входа пользователя с помощью onAuthStateChanged(), вы также можете прослушивать изменения токена идентификатора пользователя с помощью onIdTokenChanged () . Вам нужно будет использовать новый токен только тогда, когда прикрепленный вами наблюдатель показывает, что появляется новый (например, когда он обновляется каждый час SDK).

...