يمكنك السماح للمستخدمين بالمصادقة باستخدام Firebase من خلال حساباتهم على GitHub عن طريق دمج مصادقة GitHub في تطبيقك. ويمكنك دمج مصادقة GitHub إما باستخدام حزمة تطوير البرامج (SDK) من Firebase لتنفيذ عملية تسجيل الدخول، أو عن طريق تنفيذ عملية GitHub OAuth 2.0 يدويًا وتمرير رمز الدخول الناتج إلى Firebase.
قبل البدء
- أضِف Firebase إلى مشروع JavaScript.
- في وحدة تحكّم Firebase، انتقِل إلى الأمان > المصادقة.
- في علامة التبويب طريقة تسجيل الدخول، فعِّل موفِّر تسجيل الدخول GitHub.
-
أضِف معرّف العميل وسر العميل من وحدة تحكّم المطوّرين الخاصة بمقدّم الخدمة إلى إعدادات مقدّم الخدمة:
- سجِّل تطبيقك كتطبيق مطوِّر على GitHub واحصل على معرّف العميل وسر العميل الخاصين بتطبيقك على بروتوكول OAuth 2.0.
-
تأكَّد من ضبط معرّف الموارد المنتظم لإعادة التوجيه في OAuth على Firebase (على سبيل المثال،
my-app-12345.firebaseapp.com/__/auth/handler) كـ عنوان URL لردّ الاتصال الخاص بالتفويض في صفحة إعدادات تطبيقك على إعدادات تطبيق GitHub.
- انقر على حفظ.
التعامل مع عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) من Firebase
إذا كنت بصدد إنشاء تطبيق ويب، فإنّ أسهل طريقة لمصادقة المستخدمين باستخدام Firebase من خلال حساباتهم على GitHub هي التعامل مع عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) الخاصة بلغة JavaScript في Firebase. (إذا أردت مصادقة مستخدم في Node.js أو بيئة أخرى غير المتصفّح، عليك التعامل مع عملية تسجيل الدخول يدويًا).
لإدارة عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) من Firebase JavaScript، اتّبِع الخطوات التالية:
- أنشئ مثيلاً لكائن موفّر GitHub:
Web
import { GithubAuthProvider } from "firebase/auth"; const provider = new GithubAuthProvider();
Web
var provider = new firebase.auth.GithubAuthProvider();
- اختياري: حدِّد نطاقات إضافية لبروتوكول OAuth 2.0 تريد طلبها من موفّر المصادقة. لإضافة نطاق، استخدِم الدالة
addScope. على سبيل المثال:يمكنك الاطّلاع على مستندات موفّر المصادقة.Web
provider.addScope('repo');
Web
provider.addScope('repo');
- اختياري: حدِّد مَعلمات إضافية لموفّر OAuth المخصّص
التي تريد إرسالها مع طلب OAuth. لإضافة مَعلمة مخصّصة، استدعِ الدالة
setCustomParametersعلى مقدّم الخدمة الذي تمّت تهيئته باستخدام عنصر يحتوي على المفتاح كما هو محدّد في مستندات مقدّم خدمة OAuth والقيمة المقابلة. على سبيل المثال:لا يُسمح باستخدام مَعلمات OAuth المطلوبة المحجوزة وسيتم تجاهلها. لمزيد من التفاصيل، يمكنك الاطّلاع على مرجع موفّر المصادقة.Web
provider.setCustomParameters({ 'allow_signup': 'false' });
Web
provider.setCustomParameters({ 'allow_signup': 'false' });
- يمكنك المصادقة باستخدام Firebase من خلال عنصر موفّر GitHub. يمكنك أن تطلب من المستخدمين تسجيل الدخول باستخدام حساباتهم على GitHub إما عن طريق فتح نافذة منبثقة أو عن طريق إعادة التوجيه إلى صفحة تسجيل الدخول. يُفضَّل استخدام طريقة إعادة التوجيه على الأجهزة الجوّالة.
- لتسجيل الدخول باستخدام نافذة منبثقة، اتّصِل بالرقم
signInWithPopup:يُرجى أيضًا ملاحظة أنّه يمكنك استرداد رمز OAuth الخاص بموفّر GitHub والذي يمكن استخدامه لجلب بيانات إضافية باستخدام واجهات برمجة التطبيقات GitHub.Web
import { getAuth, signInWithPopup, GithubAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // This gives you a GitHub Access Token. You can use it to access the GitHub API. const credential = GithubAuthProvider.credentialFromResult(result); const token = credential.accessToken; // The signed-in user info. const user = result.user; // IdP data available using getAdditionalUserInfo(result) // ... }).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = GithubAuthProvider.credentialFromError(error); // ... });
Web
firebase .auth() .signInWithPopup(provider) .then((result) => { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // This gives you a GitHub Access Token. You can use it to access the GitHub API. var token = credential.accessToken; // The signed-in user info. var user = result.user; // IdP data available in result.additionalUserInfo.profile. // ... }).catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... });
يمكنك أيضًا رصد الأخطاء والتعامل معها في هذا القسم. للاطّلاع على قائمة برموز الخطأ، يمكنك الرجوع إلى مستندات Auth المرجعية.
- لتسجيل الدخول عن طريق إعادة التوجيه إلى صفحة تسجيل الدخول، استدعِ الدالة
signInWithRedirect: اتّبِع أفضل الممارسات عند استخدام `signInWithRedirect`.بعد ذلك، يمكنك أيضًا استرداد رمز OAuth الخاص بموفّر GitHub من خلال استدعاءWeb
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
getRedirectResultعند تحميل صفحتك:يمكنك أيضًا رصد الأخطاء والتعامل معها في هذا القسم. للاطّلاع على قائمة برموز الخطأ، يمكنك الرجوع إلى مستندات Auth المرجعية.Web
import { getAuth, getRedirectResult, GithubAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { const credential = GithubAuthProvider.credentialFromResult(result); if (credential) { // This gives you a GitHub Access Token. You can use it to access the GitHub API. const token = credential.accessToken; // ... } // The signed-in user info. const user = result.user; // IdP data available using getAdditionalUserInfo(result) // ... }).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = GithubAuthProvider.credentialFromError(error); // ... });
Web
firebase.auth() .getRedirectResult() .then((result) => { if (result.credential) { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // This gives you a GitHub Access Token. You can use it to access the GitHub API. var token = credential.accessToken; // ... } // The signed-in user info. var user = result.user; // IdP data available in result.additionalUserInfo.profile. // ... }).catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... });
- لتسجيل الدخول باستخدام نافذة منبثقة، اتّصِل بالرقم
التعامل مع عملية تسجيل الدخول يدويًا
يمكنك أيضًا إثبات ملكية حساب GitHub باستخدام Firebase من خلال معالجة عملية تسجيل الدخول عن طريق استدعاء نقاط نهاية GitHub OAuth 2.0:
- يمكنك دمج مصادقة GitHub في تطبيقك باتّباع مستندات المطوّرين. في نهاية عملية تسجيل الدخول إلى GitHub، ستتلقّى رمز دخول OAuth 2.0.
- إذا كنت بحاجة إلى تسجيل الدخول إلى تطبيق Node.js، أرسِل رمز الدخول الخاص ببروتوكول OAuth إلى تطبيق Node.js.
- بعد أن يسجّل المستخدم الدخول بنجاح باستخدام GitHub، استبدِل رمز الدخول OAuth 2.0 ببيانات اعتماد Firebase:
Web
import { GithubAuthProvider } from "firebase/auth"; const credential = GithubAuthProvider.credential(token);
Web
var credential = firebase.auth.GithubAuthProvider.credential(token);
- يمكنك المصادقة باستخدام Firebase من خلال بيانات اعتماد Firebase باتّباع الخطوات التالية:
Web
import { getAuth, signInWithCredential } from "firebase/auth"; // Sign in with the credential from the user. const auth = getAuth(); signInWithCredential(auth, credential) .then((result) => { // Signed in // ... }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // ... });
Web
// Sign in with the credential from the user. firebase.auth() .signInWithCredential(credential) .then((result) => { // Signed in // ... }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.email; // ... });
المصادقة باستخدام Firebase في إضافة Chrome
إذا كنت بصدد إنشاء تطبيق إضافة Chrome، يُرجى الاطّلاع على دليل "المستندات خارج الشاشة".
الخطوات التالية
بعد أن يسجّل المستخدم الدخول للمرة الأولى، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد، أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات مقدّم خدمة المصادقة التي سجّل المستخدم الدخول بها. يتم تخزين هذا الحساب الجديد كجزء من مشروع Firebase، ويمكن استخدامه لتحديد هوية المستخدم على مستوى كل تطبيق في مشروعك، بغض النظر عن طريقة تسجيل الدخول.
-
في تطبيقاتك، الطريقة المقترَحة لمعرفة حالة المصادقة للمستخدم هي ضبط مراقب على العنصر
Auth. يمكنك بعد ذلك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من الكائنUser. راجِع مقالة إدارة المستخدمين. في Firebase Realtime Database وCloud Storage قواعد الأمان، يمكنك الحصول على معرّف المستخدِم الفريد للمستخدِم الذي سجّل الدخول من المتغيّر
auth، واستخدامه للتحكّم في البيانات التي يمكن للمستخدِم الوصول إليها.
يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام موفّري مصادقة متعدّدين من خلال ربط بيانات اعتماد موفّر المصادقة بحساب مستخدم حالي.
لتسجيل خروج مستخدم، اتّصِل بالرقم
signOut:
Web
import { getAuth, signOut } from "firebase/auth"; const auth = getAuth(); signOut(auth).then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });
Web
firebase.auth().signOut().then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });