Проверка того, вошел ли пользователь в систему через Express.js и Пожарный магазин

# #node.js #firebase #express #google-cloud-firestore #firebase-authentication

Вопрос:

Я пытаюсь определить, вошел ли пользователь в систему через Express.js и Пожарный магазин. Идея состоит в том, чтобы форма входа/создания пользователя отображалась по URL-адресу ‘/’. Однако, если пользователь вошел в систему, приложение перенаправит пользователя на страницу панели мониторинга пользователя. Это произойдет, когда пользователь войдет в систему или создаст учетную запись.

Когда я запускаю свой код, я получаю ошибку

 TypeError: admin.auth(...).onAuthStateChanged is not a function
 

Я понял, что в пакете администратора нет onAuthStateChanged, поскольку это то, что существует только на стороне клиента. Однако мне было интересно, как бы я реализовал загрузку другого представления в зависимости от того, вошел ли пользователь в систему или нет со стороны сервера? Хорошо ли мне вообще делать это через серверную часть или есть лучший способ для меня подойти к этому?

 const admin = require('firebase-admin')
...

app.get('/', (req, res) => {
    admin.auth().onAuthStateChanged(function(user) {

        // render user dashboard if user is logged in 
        if (user) {
            getRestaurant('KOBmyfQEu4urNGgBTuiJ').then(data => {
                let ambassadorPromise = getAmbassadorInfo('KOBmyfQEu4urNGgBTuiJ')
                let activityPromise = getActivityFeed('KOBmyfQEu4urNGgBTuiJ')
        
                var restaurantName = data['name']
                var totalScans = data['total_scans']
        
                Promise.all([ambassadorPromise, activityPromise]).then(values => {
                    ...
        
                    res.render('dashboard', {restaurantName, totalScans, ambassadorList, activityList})
                })
            })
        } 

        // render account creation/login page is user is not logged in
        else {
            res.render('auth')
        }
      });

})
 

Ответ №1:

onAuthStateChanged это функция в клиентском SDK Firebase. Обычно вы получаете маркер идентификатора с помощью клиентского SDK, а затем передаете его в своем запросе API, но здесь, похоже, вам нужно аутентифицировать пользователя перед отображением страницы. В таком случае вам следует использовать сессионные файлы cookie. Как только пользователь войдет в систему, сделайте запрос API на сервер, сгенерируйте файл cookie с помощью createSessionCookie() метода и установите его. Затем вы можете проверить файл cookie перед отображением страницы.

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

Комментарии:

1. Спасибо, что поделились этим. В конце концов это сработало.