الهوية الموحّدة وتسجيل الدخول على وسائل التواصل الاجتماعي

المصادقة الاجتماعية هي عبارة عن مصادقة متعددة الخطوات تتيح لك تسجيل دخول مستخدم إلى حساب أو ربطه بحساب حالي.

تتيح كل من الأنظمة الأساسية الأصلية والويب إنشاء بيانات اعتماد يمكن تمريرها بعد ذلك إلى الطريقة signInWithCredential أو linkWithCredential. وبدلاً من ذلك، يمكنك بدء عملية المصادقة عبر نافذة منبثقة أو عملية إعادة توجيه على الأنظمة الأساسية للويب.

Google

يتم إعداد معظم الإعدادات من قبل عند استخدام "تسجيل الدخول بحساب Google" مع Firebase، ومع ذلك عليك التأكّد من ضبط مفتاح SHA1 الخاص بجهازك للاستخدام مع Android. يمكنك الاطّلاع على كيفية إنشاء المفتاح في مستندات المصادقة.

تأكَّد من تفعيل موفِّر تسجيل الدخول باستخدام "Google" على وحدة تحكُّم Firebase.

إذا سجّل المستخدم الدخول من خلال Google، وبعد تسجيل الحساب يدويًا، سيتغير موفِّر المصادقة تلقائيًا إلى Google، بسبب مفهوم عمليات مصادقة Firebase الذي يتمثل في مقدمي الخدمات الموثوق بهم. يمكنك الاطّلاع على مزيد من المعلومات حول هذا الموضوع هنا.

iOS+ وAndroid

وعلى الأنظمة الأساسية الأصلية، يجب توفّر مكتبة تابعة لجهة خارجية لبدء مسار المصادقة.

يمكنك تثبيت المكوّن الإضافي الرسمي google_sign_in.

بعد تثبيت بيانات الاعتماد، ابدأ عملية تسجيل الدخول وأنشِئ بيانات اعتماد جديدة:

import 'package:google_sign_in/google_sign_in.dart';

Future<UserCredential> signInWithGoogle() async {
  // Trigger the authentication flow
  final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();

  // Obtain the auth details from the request
  final GoogleSignInAuthentication? googleAuth = await googleUser?.authentication;

  // Create a new credential
  final credential = GoogleAuthProvider.credential(
    accessToken: googleAuth?.accessToken,
    idToken: googleAuth?.idToken,
  );

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithCredential(credential);
}

الويب

توفِّر حزمة تطوير البرامج (SDK) لمنصّة Firebase على الويب دعمًا لمعالجة مسار المصادقة تلقائيًا باستخدام مشروع Firebase. على سبيل المثال:

أنشئ موفِّر مصادقة Google، مع توفير أي نطاق إذن إضافي تريد الحصول عليه من المستخدم:

GoogleAuthProvider googleProvider = GoogleAuthProvider();

googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
  'login_hint': 'user@example.com'
});

قدِّم بيانات الاعتماد إلى الطريقة signInWithPopup. سيؤدي ذلك إلى ظهور نافذة جديدة تطلب من المستخدم تسجيل الدخول إلى مشروعك. بدلاً من ذلك، يمكنك استخدام signInWithRedirect للاحتفاظ بعملية المصادقة في النافذة نفسها

Future<UserCredential> signInWithGoogle() async {
  // Create a new provider
  GoogleAuthProvider googleProvider = GoogleAuthProvider();

  googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
  googleProvider.setCustomParameters({
    'login_hint': 'user@example.com'
  });

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(googleProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(googleProvider);
}

ألعاب Google Play

يمكنك مصادقة المستخدمين في لعبة Android من خلال تسجيل الدخول إلى "ألعاب Play".

Android

اتّبِع تعليمات إعداد Google على جهاز Android، ثم اضبط خدمات ألعاب Play باستخدام معلومات تطبيقك على Firebase.

سيؤدي ما يلي إلى بدء عملية تسجيل الدخول وإنشاء بيانات اعتماد جديدة وتسجيل دخول المستخدم:

final googleUser = await GoogleSignIn(
  signInOption: SignInOption.games,
).signIn();

final googleAuth = await googleUser?.authentication;

if (googleAuth != null) {
  // Create a new credential
  final credential = GoogleAuthProvider.credential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );

  // Once signed in, return the UserCredential
  await _auth.signInWithCredential(credential);
}

Facebook

قبل البدء، عليك إعداد تطبيق Facebook Developer واتّباع خطوات عملية الإعداد لتفعيل تسجيل الدخول إلى Facebook.

تأكَّد من تفعيل موفِّر تسجيل الدخول إلى Facebook على وحدة تحكُّم Firebase. مع ضبط سر ومعرِّف تطبيق Facebook.

iOS+ وAndroid

وعلى الأنظمة الأساسية الأصلية، يلزم توفُّر مكتبة تابعة لجهة خارجية من أجل تثبيت حزمة تطوير البرامج (SDK) على Facebook وبدء مسار المصادقة.

ثبِّت المكوّن الإضافي flutter_facebook_auth.

سيكون عليك اتّباع الخطوات الواردة في مستندات المكوّن الإضافي لضمان إعداد حزمتَي تطوير البرامج (SDK) لمنصة Facebook على نظامَي التشغيل Android وiOS بشكل صحيح. بعد الانتهاء، ابدأ عملية تسجيل الدخول وأنشِئ بيانات اعتماد على Facebook وسجِّل دخول المستخدم:

import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';

Future<UserCredential> signInWithFacebook() async {
  // Trigger the sign-in flow
  final LoginResult loginResult = await FacebookAuth.instance.login();

  // Create a credential from the access token
  final OAuthCredential facebookAuthCredential = FacebookAuthProvider.credential(loginResult.accessToken.token);

  // Once signed in, return the UserCredential
  return FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);
}

الويب

وعلى الويب، توفر حزمة تطوير البرامج (SDK) لمنصّة Firebase دعمًا لمعالجة سير المصادقة تلقائيًا باستخدام تفاصيل تطبيق Facebook المتوفرة في وحدة تحكُّم Firebase. على سبيل المثال:

أنشئ موفِّر خدمة على Facebook، مع توفير أي نطاق إذن إضافي تريد الحصول عليه من المستخدم.

تأكَّد من إضافة معرِّف الموارد المنتظم (URI) الخاص بإعادة توجيه OAuth من وحدة تحكُّم Firebase على أنّه معرّف موارد منتظم (URI) صالح لإعادة توجيه OAuth في تطبيق Facebook.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
  'display': 'popup',
});

قدِّم بيانات الاعتماد إلى الطريقة signInWithPopup. سيؤدي ذلك إلى ظهور نافذة جديدة تطلب من المستخدم تسجيل الدخول إلى تطبيق Facebook:

Future<UserCredential> signInWithFacebook() async {
  // Create a new provider
  FacebookAuthProvider facebookProvider = FacebookAuthProvider();

  facebookProvider.addScope('email');
  facebookProvider.setCustomParameters({
    'display': 'popup',
  });

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(facebookProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(facebookProvider);
}

Apple

iOS+

قبل البدء، يجب ضبط ميزة "تسجيل الدخول باستخدام حساب Apple" وتفعيل Apple كموفِّر لتسجيل الدخول.

بعد ذلك، يجب التأكّد من تفعيل ميزة "تسجيل الدخول باستخدام حساب Apple" في تطبيقات Runner.

Android

قبل البدء، يجب ضبط ميزة "تسجيل الدخول باستخدام حساب Apple" وتفعيل Apple كموفِّر لتسجيل الدخول.

الويب

قبل البدء، يجب ضبط ميزة "تسجيل الدخول باستخدام حساب Apple" وتفعيل Apple كموفِّر لتسجيل الدخول.

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithApple() async {
  final appleProvider = AppleAuthProvider();
  if (kIsWeb) {
    await FirebaseAuth.instance.signInWithPopup(appleProvider);
  } else {
    await FirebaseAuth.instance.signInWithProvider(appleProvider);
  }
}

إبطال الرموز المميّزة للمصادقة من Apple

يؤدي تسجيل الدخول إلى Apple على منصات Apple إلى عرض رمز تفويض يمكن استخدامه لإبطال الرمز المميّز للمصادقة من Apple باستخدام واجهة برمجة التطبيقات revokeTokenWithAuthorizationCode().

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithApple() async {
  final appleProvider = AppleAuthProvider();

  UserCredential userCredential = await FirebaseAuth.instance.signInWithPopup(appleProvider);
  // Keep the authorization code returned from Apple platforms
  String? authCode = userCredential.additionalUserInfo?.authorizationCode;
  // Revoke Apple auth token
  await FirebaseAuth.instance.revokeTokenWithAuthorizationCode(authCode!);
}

Microsoft

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithMicrosoft() async {
  final microsoftProvider = MicrosoftAuthProvider();
  if (kIsWeb) {
    await FirebaseAuth.instance.signInWithPopup(microsoftProvider);
  } else {
    await FirebaseAuth.instance.signInWithProvider(microsoftProvider);
  }
}

Twitter

تأكَّد من تفعيل موفِّر خدمة تسجيل الدخول إلى "Twitter" على وحدة تحكُّم Firebase من خلال ضبط مفتاح واجهة برمجة تطبيقات وسر لواجهة برمجة التطبيقات. تأكَّد من ضبط معرّف الموارد المنتظم (URI) لإعادة التوجيه عبر بروتوكول OAuth في Firebase (مثل my-app-12345.firebaseapp.com/__/auth/handler) كعنوان URL لمعاودة الاتصال بالتفويض في صفحة إعدادات تطبيقك في إعدادات تطبيق Twitter.

قد تحتاج أيضًا إلى طلب مستوى وصول مرتفع من واجهة برمجة التطبيقات استنادًا إلى تطبيقك.

iOS+

عليك ضبط مخطّط عنوان URL المخصّص على النحو الموضّح في الخطوة 1 في دليل iOS.

Android

إذا لم تحدد بعد الملف المرجعي SHA-1 لتطبيقك، يمكنك إجراء ذلك من صفحة الإعدادات في وحدة تحكم Firebase. راجع مصادقة البرنامج للحصول على تفاصيل حول كيفية الحصول على الملف المرجعي لخوارزمية SHA-1 لتطبيقك.

الويب

تعمل بطريقة غير تقليدية.

import 'package:firebase_auth/firebase_auth.dart';

Future<void> _signInWithTwitter() async {
  TwitterAuthProvider twitterProvider = TwitterAuthProvider();

  if (kIsWeb) {
    await FirebaseAuth.instance.signInWithPopup(twitterProvider);
  } else {
    await FirebaseAuth.instance.signInWithProvider(twitterProvider);
  }
}

GitHub

تأكَّد من إعداد تطبيق OAuth من إعدادات مطوّر برامج GitHub وتفعيل موفِّر تسجيل الدخول إلى "GitHub" في وحدة تحكُّم Firebase باستخدام معرّف العميل والسر، مع ضبط عنوان URL لمعاودة الاتصال في تطبيق GitHub.

iOS+ وAndroid

بالنسبة إلى الأنظمة الأساسية الأصلية، يجب إضافة google-services.json وGoogleService-Info.plist.

بالنسبة إلى نظام التشغيل iOS، أضِف مخطط عنوان URL المخصّص كما هو موضّح في دليل iOS في الخطوة 1.

Future<UserCredential> signInWithGitHub() async {
  // Create a new provider
  GithubAuthProvider githubProvider = GithubAuthProvider();

  return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}

الويب

توفّر حزمة GitHub SDK على الويب دعمًا لمعالجة مسار المصادقة تلقائيًا باستخدام تفاصيل تطبيق GitHub المتوفرة في وحدة تحكم Firebase. تأكّد من إضافة عنوان URL لمعاودة الاتصال في وحدة تحكُّم Firebase كعنوان URL لمعاودة الاتصال في تطبيق GitHub على وحدة تحكّم المطوّرين.

على سبيل المثال:

أنشِئ موفِّر GitHub وقدِّم بيانات الاعتماد لطريقة signInWithPopup. سيؤدي ذلك إلى ظهور نافذة جديدة تطلب من المستخدم تسجيل الدخول إلى تطبيق GitHub:

Future<UserCredential> signInWithGitHub() async {
  // Create a new provider
  GithubAuthProvider githubProvider = GithubAuthProvider();

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(githubProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(githubProvider);
}

Yahoo

تأكَّد من تفعيل موفِّر تسجيل الدخول إلى "Yahoo" على وحدة تحكُّم Firebase باستخدام مفتاح واجهة برمجة تطبيقات وسر لواجهة برمجة التطبيقات. تأكَّد أيضًا من ضبط معرّف الموارد المنتظم (URI) لإعادة التوجيه عبر بروتوكول OAuth في Firebase (مثل my-app-12345.firebaseapp.com/__/auth/handler) كمعرّف الموارد المنتظم (URI) لإعادة التوجيه في إعدادات شبكة مطوّري برامج Yahoo في تطبيقك.

iOS+

قبل البدء، يجب ضبط تسجيل الدخول إلى Yahoo لنظام التشغيل iOS وإضافة مخططات عناوين URL المخصّصة إلى برنامج التشغيل (الخطوة 1).

Android

قبل البدء، عليك ضبط تسجيل الدخول إلى Yahoo على جهاز Android.

يُرجى تذكّر إضافة بصمة إصبع SHA-1 لتطبيقك.

الويب

تعمل بطريقة غير تقليدية.

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithYahoo() async {
  final yahooProvider = YahooAuthProvider();
  if (kIsWeb) {
    await _auth.signInWithPopup(yahooProvider);
  } else {
    await _auth.signInWithProvider(yahooProvider);
  }
}

استخدام رمز الدخول عبر OAuth

باستخدام AuthProvider، يمكنك استرداد رمز الدخول المرتبط بالموفِّر من خلال تقديم الطلب التالي.

final appleProvider = AppleAuthProvider();

final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;

// You can send requests with the `accessToken`

ربط موفِّر مصادقة

إذا كنت تريد ربط مقدّم خدمة بمستخدم حالي، يمكنك استخدام الطريقة التالية: ```dart await FirebaseAuth.instance.signInAnonymously();

Final appleProvider = AppleAuthProvider();

if (kIsWeb) { await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);

// يمكنك أيضًا استخدام linkWithRedirect } else { await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }

// تمت ترقية حسابك كمستخدم مجهول الهوية ليتمكّن من التواصل مع ميزة "تسجيل الدخول باستخدام حساب Apple" ```

إعادة المصادقة مع مقدّم الخدمة

يمكن استخدام النمط نفسه مع reauthenticateWithProvider الذي يمكن استخدامه لاسترداد بيانات اعتماد جديدة للعمليات الحساسة التي تتطلّب تسجيل دخول حديثًا.

final appleProvider = AppleAuthProvider();

if (kIsWeb) {
  await FirebaseAuth.instance.currentUser?.reauthenticateWithPopup(appleProvider);

  // Or you can reauthenticate with a redirection
  // await FirebaseAuth.instance.currentUser?.reauthenticateWithRedirect(appleProvider);
} else {
  await FirebaseAuth.instance.currentUser?.reauthenticateWithProvider(appleProvider);
}

// You can now perform sensitive operations