FirebaseUI للويب هي مجموعة من المكتبات المستندة إلى حزمة تطوير البرامج (SDK) بلغة JavaScript الخاصة بخدمة Firebase Authentication، وهي تساعدك في إطلاق مسارات المصادقة بسرعة.
توفّر FirebaseUI للويب المزايا التالية:
- توافُق حزمة تطوير البرامج المعيارية الحديثة مع
initializeApp(...)وحزمة تطوير البرامج الحالية من Firebase - شاشات ونماذج وأزرار قابلة للإنشاء بدلاً من أداة واحدة متكاملة
- التوافق مع React وShadcn وAngular
- سلوكيات قابلة للإعداد لتدفقات إعادة التوجيه مقابل التدفقات المنبثقة، وGoogle One Tap، والترقية بدون الكشف عن الهوية، وإعدادات الهاتف، وغير ذلك
- إتاحة الأقلمة من خلال
@firebase-oss/ui-translations - تتوفّر ميزة مدمجة للبريد الإلكتروني/كلمة المرور، ورابط البريد الإلكتروني، ومصادقة الهاتف، ومزوّدي خدمة OAuth، وتدفقات المصادقة المتعدّدة العوامل.
يقدّم هذا الدليل خطوات مفصّلة حول التثبيت والإعداد وطرق تسجيل الدخول والإعدادات الشائعة لتطبيقات React وShadcn وAngular.
قبل البدء
أضِف Firebase إلى تطبيق الويب الخاص بك:
فعِّل المصادقة في وحدة تحكّم Firebase.
ثبِّت
firebaseإذا لم يكن متوفّرًا في مشروعك:npm install firebaseاستخدِم حزمة تطوير البرامج المعيارية من Firebase:
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(...)، ثم مرِّره إلى عملية دمج إطار العمل.
تفاعُل
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 الحالية، ولا تحتاج عادةً إلى استيراد حزمة CSS المضمّنة في FirebaseUI عند استخدام سجلّ shadcn.
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(...).
عنوان البريد الإلكتروني وكلمة المرور
- فعِّل خيار البريد الإلكتروني/كلمة المرور في وحدة تحكّم 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.
تفاعُل
```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']);
}
}
تسجيل الخروج
لتسجيل خروج المستخدمين، استخدِم واجهة برمجة التطبيقات العادية لتسجيل الخروج في مصادقة Firebase:
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، أضِفها إلى الشاشة الخاصة بمنصتك.
تفاعُل
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
استخدِم سلوك oneTapSignIn(...) لتفعيل ميزة "نقرة واحدة" من Google:
import { initializeUI, oneTapSignIn } from '@firebase-oss/ui-core';
const ui = initializeUI({
app,
behaviors: [
oneTapSignIn({
clientId: 'YOUR_GOOGLE_WEB_CLIENT_ID',
autoSelect: false,
cancelOnTapOutside: false,
}),
],
});
تأكَّد من تفعيل تسجيل الدخول باستخدام حساب Google في وحدة تحكّم Firebase، ثم انسخ معرّف عميل الويب من إعدادات موفّر خدمة Google.
بنود الخدمة وسياسة الخصوصية
إرفاق روابط السياسات من خلال إعدادات مقدّم المنصة
تفاعُل
```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,
});
الخطوات التالية
- يمكنك قراءة ملف README.md للاطّلاع على واجهة برمجة التطبيقات الكاملة والسلوكيات ومرجع المكوّنات.
- اطّلِع على MIGRATION.md إذا كنت تريد نقل تطبيق حالي إلى FirebaseUI للويب.
- يمكنك الاطّلاع على المستندات الخاصة بالحزمة في packages/react/README.md وpackages/shadcn/README.md وpackages/angular/README.md.
- يمكنك استكشاف الأمثلة في examples/react وexamples/shadcn وexamples/angular.