
FirebaseUI для веб-сайтов – это набор библиотек, созданных на основе JavaScript SDK аутентификации Firebase, которые помогают быстро реализовать процессы аутентификации.
FirebaseUI для веб-приложений имеет следующие преимущества:
- Поддержка современных модульных SDK с
initializeApp(...)и текущим Firebase JS SDK. - Составные экраны, формы и кнопки вместо одного монолитного виджета.
- Поддержка React, Shadcn и Angular.
- Настраиваемые варианты поведения для переадресации и всплывающих окон, Google One Tap, анонимного перехода на платную версию, настроек телефона и т. д.
- Поддержка локализации через
@firebase-oss/ui-translations. - Встроенная поддержка аутентификации по электронной почте и паролю, ссылке в электронном письме, номеру телефона, через поставщиков OAuth и многофакторной аутентификации.
В этом руководстве описаны установка, инициализация, способы входа и общие настройки для приложений React, Shadcn и Angular.
Подготовка
Добавьте Firebase в веб-приложение:
Включите аутентификацию в консоли Firebase.
Установите
firebase, если его ещё нет в вашем проекте:npm install firebaseИспользуйте модульный Firebase JS SDK:
import { initializeApp } from 'firebase/app'; const app = initializeApp({ /* your Firebase config */ });Выберите платформу и установите FirebaseUI:
Для приложений React на основе shadcn/ui добавьте реестр Firebase в
components.json:{ "registries": { "@firebase": "https://firebaseopensource.com/r/{name}.json" } }Компоненты аутентификации, используемые в этом руководстве, доступны в реестре, включая
sign-in-auth-screen,sign-up-auth-screen,email-link-auth-screen,oauth-screen,phone-auth-screen,google-sign-in-button,apple-sign-in-buttonиgithub-sign-in-button.Затем добавьте нужные компоненты:
npx shadcn@latest add @firebase/sign-in-auth-screen @firebase/google-sign-in-buttonЭто установит основные зависимости React FirebaseUI.
Для приложений React без shadcn/ui установите:
npm install @firebase-oss/ui-react@beta @firebase-oss/ui-stylesДля приложений Angular установите:
npm install @angular/fire @firebase-oss/ui-angular@beta @firebase-oss/ui-core@beta @firebase-oss/ui-styles@beta
Инициализация FirebaseUI
Создайте общий магазин интерфейса с помощью initializeUI(...), а затем передайте его в интеграцию фреймворка.
React;
import { initializeApp } from 'firebase/app';
import { initializeUI } from '@firebase-oss/ui-core';
import { FirebaseUIProvider } from '@firebase-oss/ui-react';
const app = initializeApp({
/* your Firebase config */
});
const ui = initializeUI({
app,
});
export function AppProviders({ children }: { children: React.ReactNode }) {
return <FirebaseUIProvider ui={ui}>{children}</FirebaseUIProvider>;
}
Shadcn
Shadcn использует ту же настройку, что и React, поскольку также использует @firebase-oss/ui-react:
import { initializeApp } from 'firebase/app';
import { initializeUI } from '@firebase-oss/ui-core';
import { FirebaseUIProvider } from '@firebase-oss/ui-react';
const app = initializeApp({
/* your Firebase config */
});
const ui = initializeUI({
app,
});
export function AppProviders({ children }: { children: React.ReactNode }) {
return <FirebaseUIProvider ui={ui}>{children}</FirebaseUIProvider>;
}
Эти компоненты используют существующие стили shadcn. Обычно при использовании реестра shadcn не нужно импортировать CSS, входящий в состав FirebaseUI.
Angular
import { type ApplicationConfig } from '@angular/core';
import { provideFirebaseApp, initializeApp } from '@angular/fire/app';
import { provideFirebaseUI } from '@firebase-oss/ui-angular';
import { initializeUI } from '@firebase-oss/ui-core';
export const appConfig: ApplicationConfig = {
providers: [
provideFirebaseApp(() =>
initializeApp({
/* your Firebase config */
}),
),
provideFirebaseUI((apps) =>
initializeUI({
app: apps[0],
}),
),
],
};
Включить стили
В FirebaseUI есть готовые компоненты интерфейса для React и Angular. Чтобы использовать компоненты, добавьте их CSS:
Если вы используете Tailwind с React или Angular:
В противном случае добавьте стили FirebaseUI:
@import '@firebase-oss/ui-styles/dist.min.css';
FirebaseUI для веб-приложений поддерживает пользовательские темы с помощью переопределения переменных CSS. Подробную информацию можно найти в документации по темам.
Как настроить способы входа
Прежде чем пользователи смогут войти в аккаунт, включите нужных поставщиков в разделе Аутентификация -> Способ входа в консоли Firebase.
В FirebaseUI для веб-приложений используются экраны, формы и кнопки, которые вы отрисовываете напрямую.
Общая конфигурация для этих потоков находится в behaviors, переданном в initializeUI(...).
Адрес электронной почты и пароль
- Включите Email/Password в консоли Firebase.
- Отрисовывайте
SignInAuthScreenилиSignUpAuthScreenв React, сгенерированные компонентыsign-in-auth-screenилиsign-up-auth-screenв Shadcn илиfui-sign-in-auth-screenилиfui-sign-up-auth-screenв Angular.
Аутентификация по ссылке в электронном письме
- Включите Электронная почта/пароль и Ссылка на электронную почту (вход без пароля) в консоли Firebase.
- Отобразите
EmailLinkAuthScreenв React, сгенерированный компонентemail-link-auth-screenв Shadcn илиfui-email-link-auth-screenв Angular. - Войдите в аккаунт, используя текущий URL и основные вспомогательные функции, если это необходимо.
import { completeEmailLinkSignIn } from '@firebase-oss/ui-core';
await completeEmailLinkSignIn(ui, window.location.href);
Поставщики OAuth
FirebaseUI для веб-приложений поддерживает встроенные кнопки для таких поставщиков, как Google, Apple, Facebook, GitHub, Microsoft и X/Twitter.
- Включите поставщика в консоли Firebase.
- При необходимости добавьте домен приложения в раздел Авторизованные домены.
- Отобразите
OAuthScreenс нужными кнопками поставщиков, напримерGoogleSignInButton,AppleSignInButton,FacebookSignInButton,GitHubSignInButton,MicrosoftSignInButtonилиTwitterSignInButtonв React, с эквивалентами shadcn, созданными в вашем приложении, илиfui-oauth-screenсfui-google-sign-in-button,fui-apple-sign-in-button,fui-facebook-sign-in-button,fui-github-sign-in-button,fui-microsoft-sign-in-buttonилиfui-twitter-sign-in-buttonв Angular.
Номер телефона
- Включите Телефон в консоли Firebase.
- Добавьте домен приложения в раздел Авторизованные домены.
- Отрисовывайте
PhoneAuthScreenилиPhoneAuthFormв React, сгенерированные компонентыphone-auth-screenилиphone-auth-formв Shadcn илиfui-phone-auth-screenв Angular.
При необходимости настройте разрешенные страны, страну по умолчанию или поведение reCAPTCHA:
import {
countryCodes,
initializeUI,
recaptchaVerification,
} from '@firebase-oss/ui-core';
const ui = initializeUI({
app,
behaviors: [
countryCodes({
allowedCountries: ['GB', 'US', 'FR'],
defaultCountry: 'GB',
}),
recaptchaVerification({
size: 'compact',
theme: 'light',
}),
],
});
Настройки
Настройте поведение общего доступа к авторизации в behaviors, переданном в initializeUI(...).
Как требовать указывать отображаемое имя при регистрации
import { initializeUI, requireDisplayName } from '@firebase-oss/ui-core';
const ui = initializeUI({
app,
behaviors: [requireDisplayName()],
});
Как обновить подписку для анонимных пользователей
Используйте поведение autoUpgradeAnonymousUsers(...), чтобы объединить анонимный сеанс с аккаунтом, в который выполнен вход.
import {
autoUpgradeAnonymousUsers,
initializeUI,
} from '@firebase-oss/ui-core';
const ui = initializeUI({
app,
behaviors: [
autoUpgradeAnonymousUsers({
async onUpgrade(ui, oldUserId, credential) {
// Migrate or merge user data here if needed.
},
}),
],
});
Подробную информацию о переносе можно найти в файле MIGRATION.md.
Войти
Отобразите нужный экран аутентификации и обработайте успешное выполнение в обратных вызовах компонента или выходных данных Angular.
React;
```tsx import { SignInAuthScreen } from '@firebase-oss/ui-react'; import { useNavigate } from 'react-router';export function SignInPage() { const navigate = useNavigate();
return (
Shadcn
Shadcn использует ту же среду выполнения и тот же поток, что и React. Единственное отличие заключается в том, что сгенерированный компонент импортируется из приложения, а не из @firebase-oss/ui-react:
export function SignInPage() { const navigate = useNavigate();
return (
Angular
import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { SignInAuthScreenComponent } from '@firebase-oss/ui-angular';
import type { User } from '@angular/fire/auth';
@Component({
selector: 'app-sign-in-page',
standalone: true,
imports: [SignInAuthScreenComponent],
template: `
<fui-sign-in-auth-screen (signIn)="onSignIn($event)" />
`,
})
export class SignInPageComponent {
constructor(private router: Router) {}
onSignIn(user: User) {
this.router.navigate(['/dashboard']);
}
}
Выйти
Чтобы выйти из аккаунта, используйте стандартный API Firebase Authentication:
import { getAuth, signOut } from 'firebase/auth';
const auth = getAuth(app);
await signOut(auth);
Поставщики OAuth: всплывающее окно или переадресация
Выберите способ входа в аккаунт поставщика контента:
providerPopupStrategy()для всплывающих оконproviderRedirectStrategy()для переадресации
Всплывающее окно используется по умолчанию, поэтому вам нужно настроить только переадресацию:
import { initializeUI, providerRedirectStrategy } from '@firebase-oss/ui-core';
const ui = initializeUI({
app,
behaviors: [providerRedirectStrategy()],
});
Чтобы отобразить кнопки OAuth, добавьте их на экран, предназначенный для определенной платформы.
React;
import {
GitHubSignInButton,
GoogleSignInButton,
OAuthScreen,
} from '@firebase-oss/ui-react';
export function OAuthPage() {
return (
<OAuthScreen>
<GoogleSignInButton />
<GitHubSignInButton />
</OAuthScreen>
);
}
Shadcn
import { GitHubSignInButton } from '@/components/github-sign-in-button';
import { GoogleSignInButton } from '@/components/google-sign-in-button';
import { OAuthScreen } from '@/components/oauth-screen';
export function OAuthPage() {
return (
<OAuthScreen>
<GoogleSignInButton />
<GitHubSignInButton />
</OAuthScreen>
);
}
Angular
import { Component } from '@angular/core';
import {
GithubSignInButtonComponent,
GoogleSignInButtonComponent,
OAuthScreenComponent,
} from '@firebase-oss/ui-angular';
@Component({
selector: 'app-oauth-page',
standalone: true,
imports: [
OAuthScreenComponent,
GoogleSignInButtonComponent,
GithubSignInButtonComponent,
],
template: `
<fui-oauth-screen>
<fui-google-sign-in-button />
<fui-github-sign-in-button />
</fui-oauth-screen>
`,
})
export class OAuthPageComponent {}
Google One Tap
Чтобы включить вход с аккаунтом Google через One Tap, используйте поведение oneTapSignIn(...):
import { initializeUI, oneTapSignIn } from '@firebase-oss/ui-core';
const ui = initializeUI({
app,
behaviors: [
oneTapSignIn({
clientId: 'YOUR_GOOGLE_WEB_CLIENT_ID',
autoSelect: false,
cancelOnTapOutside: false,
}),
],
});
Убедитесь, что в консоли Firebase включен вход через аккаунт Google, а затем скопируйте идентификатор веб-клиента из настроек поставщика Google.
Условия использования и политика конфиденциальности
Добавляйте ссылки на правила через конфигурацию поставщика платформы.
React;
```tsx import { FirebaseUIProvider } from '@firebase-oss/ui-react';<FirebaseUIProvider ui={ui} policies={{ termsOfServiceUrl: 'https://example.com/terms', privacyPolicyUrl: 'https://example.com/privacy', }}
{children} ; ```
Shadcn
Используйте ту же конфигурацию FirebaseUIProvider, что и в React.
Angular
import { type ApplicationConfig } from '@angular/core';
import { provideFirebaseUIPolicies } from '@firebase-oss/ui-angular';
export const appConfig: ApplicationConfig = {
providers: [
provideFirebaseUIPolicies(() => ({
termsOfServiceUrl: 'https://example.com/terms',
privacyPolicyUrl: 'https://example.com/privacy',
})),
],
};
Переводы
FirebaseUI для веб-приложений поддерживает локализацию с помощью @firebase-oss/ui-translations.
import { initializeUI } from '@firebase-oss/ui-core';
import { registerLocale } from '@firebase-oss/ui-translations';
const enUsCustom = registerLocale('en-US', {
labels: {
signIn: 'Continue',
},
});
const ui = initializeUI({
app,
locale: enUsCustom,
});
Дальнейшие действия
- Полную информацию об API, поведении и компонентах можно найти в файле README.md.
- Если вы переносите существующее приложение в FirebaseUI для интернета, ознакомьтесь с файлом MIGRATION.md.
- Документацию по отдельным пакетам можно найти в файлах packages/react/README.md, packages/shadcn/README.md и packages/angular/README.md.
- Изучите примеры в папках examples/react, examples/shadcn и examples/angular.