# #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. Спасибо, что поделились этим. В конце концов это сработало.