الهوية الموحدة & تسجيل الدخول الاجتماعي

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

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

جوجل

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

تأكد من تمكين موفر تسجيل الدخول "Google" على Firebase Console .

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

iOS+ وأندرويد

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

قم بتثبيت البرنامج الإضافي 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);
}

ويب

على الويب، توفر Firebase SDK الدعم للتعامل تلقائيًا مع تدفق المصادقة باستخدام مشروع 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);
}

العاب جوجل بلاي

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

ذكري المظهر

اتبع تعليمات إعداد 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 Developer الخاص بك واتبع عملية الإعداد لتمكين تسجيل الدخول إلى Facebook.

تأكد من تمكين موفر تسجيل الدخول "Facebook" على Firebase Console . باستخدام معرف تطبيق Facebook والمجموعة السرية.

iOS+ وأندرويد

على الأنظمة الأساسية الأصلية، يلزم وجود مكتبة خارجية لتثبيت Facebook SDK وتشغيل تدفق المصادقة.

قم بتثبيت البرنامج المساعد flutter_facebook_auth .

ستحتاج إلى اتباع الخطوات الواردة في وثائق البرنامج الإضافي للتأكد من تهيئة كل من Android وiOS Facebook SDK بشكل صحيح. بمجرد الانتهاء، قم بتشغيل تدفق تسجيل الدخول، وقم بإنشاء بيانات اعتماد 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);
}

ويب

على الويب، توفر Firebase SDK الدعم للتعامل تلقائيًا مع تدفق المصادقة باستخدام تفاصيل تطبيق 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 وتمكين Apple كموفر لتسجيل الدخول .

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

ذكري المظهر

قبل البدء، قم بتكوين تسجيل الدخول باستخدام 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 لنظام التشغيل iOS وإضافة أنظمة URL المخصصة إلى برنامج Runner (الخطوة 1) .

ذكري المظهر

قبل أن تبدأ في تكوين تسجيل دخول Microsoft لنظام Android .

لا تنس إضافة بصمة SHA-1 لتطبيقك.

ويب

قبل أن تبدأ في تكوين تسجيل دخول 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" على Firebase Console باستخدام مفتاح API ومجموعة سرية API. تأكد من تعيين عنوان URL لإعادة توجيه Firebase OAuth (على سبيل المثال، my-app-12345.firebaseapp.com/__/auth/handler) كعنوان URL لرد اتصال التفويض في صفحة إعدادات تطبيقك في تهيئة تطبيق Twitter .

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

دائرة الرقابة الداخلية +

تحتاج إلى تكوين نظام عنوان URL المخصص الخاص بك كما هو موضح في دليل iOS الخطوة 1 .

ذكري المظهر

إذا لم تكن قد حددت بعد بصمة 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);
  }
}

جيثب

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

iOS+ وأندرويد

بالنسبة للأنظمة الأساسية الأصلية، تحتاج إلى إضافة 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" على Firebase Console باستخدام مفتاح API ومجموعة API Secret. تأكد أيضًا من تعيين معرف URI لإعادة توجيه Firebase OAuth (على سبيل المثال، my-app-12345.firebaseapp.com/__/auth/handler) باعتباره معرف URI لإعادة التوجيه في تكوين شبكة مطوري Yahoo لتطبيقك.

دائرة الرقابة الداخلية +

قبل أن تبدأ، قم بتكوين تسجيل دخول Yahoo لنظام iOS وأضف أنظمة URL المخصصة إلى Runner (الخطوة 1) .

ذكري المظهر

قبل أن تبدأ، قم بتكوين تسجيل الدخول إلى 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 wait FirebaseAuth.instance.signInAnonymously();

Final appleProvider = AppleAuthProvider();

إذا (kIsWeb) { انتظار FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);

// يمكنك أيضًا استخدام linkWithRedirect } else { انتظار 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