Firebase очень прост в использовании. Предоставляемый SDK доступен практически для всех языков и платформ. Единственное, чего сейчас не хватает, это SDK администратора для веб.
На самом деле, он доступен для Javascript, но создан для работы на Node. Есть некоторые среды, которые не поддерживают эту платформу и используют стандартные веб-интерфейсы.
Одной из таких сред является Cloudflare Workers. Если вы попытаетесь использовать Admin SDK для Node на этих рабочих, он просто не будет работать из-за отсутствия библиотек.
Дело в том, что мне отчаянно нужно было использовать его для моего текущего личного проекта. Я начал рыться в интернете в поисках какого-нибудь уже реализованного решения…., но ничего, ноль результатов.
Поэтому я решил создать свою собственную библиотеку.
Поприветствуйте flarebase-auth
Как вы заметили из названия библиотеки, она охватывает только часть аутентификации.
Я использовал стандартные Web API, такие как fetch() и WebCrypto. Чаще всего мне приходилось заниматься генерацией/оценкой токенов JWT. Я работал с библиотекой jose (единственная зависимость в проекте), потому что она кроссплатформенная и также работает с API WebCrypto.
flarebase-auth
довольно прост и написан в основном в 2 файлах: google-oauth.ts
и flarebase-auth.ts
.
google-oauth.ts
Весь код, связанный с проверкой и генерацией токенов Google OAuth 2.0, написан в этом файле. Поскольку почти каждый запрос должен быть аутентифицирован, я использовал его довольно широко.
Генерация токена OAuth 2.0 — это двухэтапный процесс. Сначала вы подписываете JWT-токен с помощью закрытого ключа учетной записи сервиса Google. Затем вы передаете этот JWT в https://oauth2.googleapis.com/token
и получаете маркер доступа. Этот процесс реализован в методе getAuthToken()
.
flarebase-auth.ts
Здесь находится собственно основная библиотека. Цель состоит в том, чтобы реализовать каждый метод, который вы обычно используете с getAuth()
в Firebase Admin SDK.
Сейчас я написал только эти методы, поскольку их достаточно для создания базовой системы входа/регистрации:
- createSessionCookie()
- verifySessionCookie()
- signInWithEmailAndPassword()
- signUpWithEmailAndPassword()
- changePassword()
- lookupUser()
Использование библиотеки
Вы можете задаться вопросом, как я могу использовать ее? Вот пример, начнем с создания экземпляра FlarebaseAuth.
import { FlarebaseAuth } from 'flarebase-auth';
const auth = new FlarebaseAuth({
apiKey: 'Firebase api key',
projectId: 'Firebase project id',
privateKey: 'Firebase private key or service account private key',
serviceAccountEmail: 'Firebase service account email',
});
Теперь вы готовы к реальным действиям! Например, вот как вы можете регистрировать пользователей с помощью электронной почты и пароля.
//Sign in with username and password
const { token, user } = await auth.signInWithEmailAndPassword(
'my@email.com',
'supersecurepassword'
);
const userEmail = user.email;
const refreshToken = token.refreshToken;
Библиотека протестирована на фиктивном проекте Firebase с фиктивным пользователем. Позже я узнал, что существует эмулятор аутентификации Firebase, созданный специально для отладочных целей.
Сейчас я буду придерживаться тестового проекта Firebase и продолжу реализовывать другие методы. Если вы хотите добавить эту функцию, вы можете создать запрос на исправление!
flarebase-auth
также поддерживает кэширование: вы можете использовать CloudflareKv
для автоматического хранения токенов OAuth 2.0 до истечения срока действия.
import { FlarebaseAuth, CloudflareKv } from 'flarebase-auth';
const auth = new FlarebaseAuth({
apiKey: 'Firebase api key',
projectId: 'Firebase project id',
privateKey: 'Firebase private key or service account private key',
serviceAccountEmail: 'Firebase service account email',
cache: new CloudflareKv(NAMESPACE);
});
Следующие шаги для flarebase-auth
Хотя сейчас я успешно использую эту библиотеку в своем текущем проекте, есть еще много улучшений и новых возможностей, которые необходимо реализовать. Вот список того, что я хочу добавить:
- Расширить поддержку кэширования для открытых ключей (валидация токенов).
- Реализовать sendEmailVerification()
- Реализовать confirmEmailVerification()
- Реализовать deleteAccount()
Ссылки
flarebase-auth
доступен на NPM и GitHub Packages. Этот проект полностью с открытым исходным кодом и лицензией MIT, так что делайте, что хотите! Вклад приветствуется 🥳.
- GitHub: https://github.com/Marplex/flarebase-auth
- Документация Firebase Auth REST API