В некоторых случаях вам может потребоваться аутентифицировать пользователей с помощью Firebase, но вы хотите обрабатывать процесс аутентификации на стороне вашего сервера, а не напрямую с клиента.
Я работал над проектом, который требовал создания REST API с использованием Express и Firebase, я знаком с созданием REST API с использованием Nodejs/Express, но никогда не делал этого с firebase. После написания конечной точки, которая создает пользователя, мне было трудно создать конечные точки, которые проверяют, доступен ли пользователь в базе данных реального времени firebase и проверяет пароль, это может быть легко для некоторых людей, но работа с firebase с этой точки зрения для первого время. Я провел много исследований, но ничего не нашел. Когда я смог понять, как это сделать, я решил написать статью, которая может помочь любому, кто хочет интегрировать это в свой проект.
Обратите внимание, что эта статья не предназначена для того, чтобы научить вас создавать/запускать экспресс-сервер. Если вы не знакомы с использованием Node.js или Express, я советую вам проверить это, прежде чем читать эту статью. Также я считаю, что вы уже закончили настройку своего проекта firebase, поэтому я не буду вдаваться в подробности.
Зайдите в консоль firebase, создайте новый проект и включите (адрес электронной почты и пароль) в поставщике аутентификации, если вы еще этого не сделали.
Проверка доступности пользователей и проверка паролей с помощью базы данных Firebase Realtime.
Чтобы иметь возможность проверять пользователей и подтверждать их пароль, вам нужен ключ API Firebase, чтобы получить ключ API, перейдите в настройки вашего проекта.
После того, как вы получили свой ключ API, держите его под рукой, так как он вам понадобится. Помните, что это руководство не поможет вам настроить проект firebase, а просто проверит пользователей, когда они входят в систему.
В приведенном ниже фрагменте кода показано, как можно аутентифицировать пользователя с помощью Firebase REST API в приложении Express.
В приведенном выше коде используется библиотека axios
для отправки запроса POST в конечную точку Firebase REST API для входа с использованием электронной почты и пароля. process.env.API_KEY
ссылается на переменную среды, которая должна быть установлена на ваш ключ Firebase API, который вы скопировали из своего профиля firebase. Запрос включает адрес электронной почты пользователя, пароль и флаг returnSecureToken
, установленный на true
.
После успешной аутентификации ответ будет содержать idToken
, представляющий токен аутентификации пользователя. Кроме того, код использует метод getUserByEmail
Firebase Admin SDK для извлечения соответствующей записи пользователя из службы аутентификации Firebase.
URL-адрес для выполнения POST-запроса https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key={Введите здесь свой ключ API}
Если ваша Firebase настроена правильно, приведенный выше код должен работать для входа пользователя после регистрации. После завершения входа пользователя возвращаемый idToken будет использоваться для авторизации и защиты конечной точки, которой требуется авторизация.
В этом разделе мы рассмотрим, как использовать промежуточное ПО для проверки аутентификации пользователя с помощью Firebase и Express. Приведенный ниже фрагмент кода демонстрирует, как реализовать промежуточное ПО для проверки подлинности пользователя с помощью Firebase Admin SDK:
В приведенном выше фрагменте кода мы определяем функцию промежуточного программного обеспечения с именем isLoggedIn
. Это промежуточное ПО ожидает, что клиент включит в запрос заголовок Authorization
, содержащий действительный токен Firebase ID, возвращенный после успешного входа пользователя в систему.
При получении запроса промежуточное ПО проверяет наличие заголовка Authorization
. Если нет, он возвращает ответ 401 Unauthorized, указывающий, что пользователь не аутентифицирован.
Если присутствует заголовок Authorization
, промежуточное ПО использует метод verifyIdToken
Firebase Admin SDK для проверки подлинности и действительности токена. Если токен действителен, информация о декодированном токене прикрепляется к свойству req.user
, позволяя последующим обработчикам маршрутов получать доступ к информации аутентифицированного пользователя.
Если проверка токена завершается неудачей, в журнал заносится ошибка и возвращается ответ 401 Unauthorized. Чтобы использовать это промежуточное ПО, вы можете включить его в маршруты или контроллеры, требующие аутентификации. Например:
В этом примере маршрут /private
защищен и требует аутентификации. Промежуточное ПО isLoggedIn
добавляется в качестве второго аргумента, гарантируя, что только аутентифицированные запросы могут получить доступ к этому маршруту.
ЗАКЛЮЧЕНИЕ:
В этой статье мы рассмотрели создание аутентификации REST API с использованием Firebase и Express. Используя функции аутентификации Firebase, вы можете легко реализовать вход в систему и защиту конечных точек. Не забывайте обрабатывать ошибки аутентификации и следуйте рекомендациям по безопасности.
Удачного кодирования!!!