يمكنك السماح للمستخدمين بالمصادقة باستخدام Firebase من خلال حساباتهم على GitHub عن طريق دمج مصادقة GitHub في تطبيقك. يمكنك دمج مصادقة GitHub إما باستخدام حزمة Firebase SDK لتنفيذ عملية تسجيل الدخول، أو عن طريق تنفيذ عملية GitHub OAuth 2.0 يدويًا وتمرير رمز الدخول الناتج إلى Firebase.
قبل البدء
- أضِف Firebase إلى مشروع JavaScript.
- في وحدة تحكّم Firebase، انتقِل إلى الأمان > المصادقة.
- في علامة التبويب طريقة تسجيل الدخول ، فعِّل موفّر تسجيل الدخول GitHub.
-
أضِف معرّف العميل وسر العميل من وحدة تحكّم المطوّرين الخاصة بموفّر الخدمة إلى إعدادات الموفّر:
- سجِّل تطبيقك كتطبيق مطوّر برامج على GitHub واحصل على بروتوكول OAuth 2.0 في تطبيقك معرّف العميل وسر العميل.
-
تأكَّد من ضبط معرّف URI لإعادة توجيه OAuth في Firebase (على سبيل المثال،
my-app-12345.firebaseapp.com/__/auth/handler) كعنوان URL لردّ الاتصال الخاص بالتفويض في صفحة إعدادات تطبيقك على إعدادات تطبيق GitHub.
- انقر على حفظ.
التعامل مع عملية تسجيل الدخول باستخدام حزمة Firebase SDK
إذا كنت تنشئ تطبيق ويب، فإنّ أسهل طريقة لمصادقة المستخدمين باستخدام Firebase من خلال حساباتهم على GitHub هي التعامل مع عملية تسجيل الدخول باستخدام حزمة Firebase JavaScript SDK. (إذا أردت مصادقة مستخدم في Node.js أو بيئة أخرى غير المتصفّح، عليك التعامل مع عملية تسجيل الدخول يدويًا).
للتعامل مع عملية تسجيل الدخول باستخدام حزمة Firebase JavaScript SDK، اتّبِع الخطوات التالية:
- أنشئ مثيلاً لكائن موفّر 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 API.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; // ... });
هذا هو أيضًا المكان الذي يمكنك فيه رصد الأخطاء والتعامل معها. للاطّلاع على قائمة برموز الأخطاء، راجِع مستندات المرجع الخاصة بالمصادقة.
- لتسجيل الدخول عن طريق إعادة التوجيه إلى صفحة تسجيل الدخول، استخدِم
signInWithRedirect: اتّبِع أفضل الممارسات عند استخدام `signInWithRedirect`.بعد ذلك، يمكنك أيضًا استرداد رمز OAuth المميّز لموفّر GitHub عن طريق استخدامWeb
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
getRedirectResultعند تحميل صفحتك:هذا هو أيضًا المكان الذي يمكنك فيه رصد الأخطاء والتعامل معها. للاطّلاع على قائمة برموز الأخطاء، راجِع مستندات المرجع الخاصة بالمصادقة.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; // ... });
- لتسجيل الدخول باستخدام نافذة منبثقة، استخدِم
التعامل مع عملية تسجيل الدخول يدويًا
يمكنك أيضًا المصادقة باستخدام Firebase من خلال حساب GitHub عن طريق التعامل مع عملية تسجيل الدخول من خلال استخدام نقاط نهاية 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. });