المصادقة عبر الشبكات الاجتماعية هي عملية مصادقة متعدّدة الخطوات تتيح لك تسجيل دخول مستخدم إلى حساب أو ربطه بحساب حالي.
تتيح كلّ من المنصّات الأصلية والويب إنشاء بيانات اعتماد يمكن بعد ذلك تمريرها إلى الطريقتَين signInWithCredential أو linkWithCredential. بدلاً من ذلك، يمكنك على منصّات الويب تشغيل عملية المصادقة من خلال نافذة منبثقة أو عملية إعادة توجيه.
يتم إعداد معظم الإعدادات مسبقًا عند استخدام ميزة "تسجيل الدخول باستخدام حساب Google" مع Firebase، ولكن عليك التأكّد من ضبط مفتاح SHA1 لجهازك لاستخدامه مع Android. يمكنك الاطّلاع على كيفية إنشاء المفتاح في مستندات المصادقة.
تأكَّد من تفعيل موفِّر تسجيل الدخول "Google" في وحدة تحكّم Firebase (انتقِل إلى علامة التبويب الأمان > المصادقة > طريقة تسجيل الدخول).
إذا سجّل المستخدم الدخول باستخدام Google بعد أن سبق له تسجيل حساب يدويًا، سيتم تغيير موفِّر المصادقة تلقائيًا إلى Google، وذلك بسبب مفهوم Firebase Authentication لموفِّري الخدمات الموثوق بهم. يمكنك الاطّلاع على مزيد من المعلومات حول هذا هنا.
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.instance.authenticate();
// Obtain the auth details from the request
final GoogleSignInAuthentication googleAuth = googleUser.authentication;
// Create a new credential
final credential = GoogleAuthProvider.credential(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);
}
"ألعاب Google Play" (في أجهزة Android فقط)
تأكَّد من تفعيل موفِّر تسجيل الدخول "ألعاب Play" في وحدة تحكّم Firebase (انتقِل إلى علامة التبويب الأمان > المصادقة > طريقة تسجيل الدخول). اتّبِع هذه التعليمات لإعداد مشروع "ألعاب Play" على Firebase.
اتّبِع هذه التعليمات لإعداد خدمات "ألعاب Play" باستخدام تطبيق Firebase.
Android
Future<void> _signInWithPlayGames() async {
// Get server auth code from 3rd party provider
// See PR description for details on how you might get the server auth code:
// https://github.com/firebase/flutterfire/pull/12201#issue-2100392487
final serverAuthCode = '...';
final playGamesCredential = PlayGamesAuthProvider.credential(
serverAuthCode: serverAuthCode);
await FirebaseAuth.instance
.signInWithCredential(playGamesCredential);
}
قبل البدء، عليك إعداد تطبيقك على Facebook للمطوّرين واتّباع عملية الإعداد لتفعيل ميزة "تسجيل الدخول باستخدام حساب Facebook".
تأكَّد من تفعيل موفِّر تسجيل الدخول "Facebook" في وحدة تحكّم Firebase مع ضبط رقم تعريف تطبيق Facebook والرمز السري (انتقِل إلى علامة التبويب الأمان > المصادقة > طريقة تسجيل الدخول).
iOS+ وAndroid
على المنصّات الأصلية، يجب استخدام مكتبة تابعة لجهة خارجية لتثبيت حزمة Facebook SDK وتشغيل عملية المصادقة.
ثبِّت المكوّن الإضافي flutter_facebook_auth.
عليك اتّباع الخطوات الواردة في مستندات المكوّن الإضافي للتأكّد من تهيئة كلّ من حزمتَي Facebook SDK لنظامَي التشغيل 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);
}
الويب
على الويب، تتيح حزمة 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
iOS+
قبل البدء، عليك إعداد ميزة "تسجيل الدخول باستخدام حساب Apple" وتفعيل Apple كموفِّر لتسجيل الدخول.
بعد ذلك، تأكَّد من أنّ تطبيقات Runner تتضمّن إمكانية "تسجيل الدخول باستخدام حساب Apple".
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 على منصّات iOS+ باستخدام الطريقة التالية:
// Implement a function that generates a nonce. See iOS documentation for how to create a nonce:
// https://firebase.google.com/docs/auth/ios/apple#sign_in_with_apple_and_authenticate_with_firebase
String rawNonce = createNonce();
// Create a SHA-256 hash of the nonce. Consider using the `crypto` package from the pub.dev registry.
String hashSHA256String = createHashSHA256String(rawNonce);
// Use the hash of the nonce to get the idToken. Consider using the `sign_in_with_apple` plugin from the pub.dev registry.
String idToken = await getIdToken();
final fullName = AppleFullPersonName(
familyName: 'Name',
givenName: 'Your',
);
// Use the `rawNonce` and `idToken` to get the credential
final credential = AppleAuthProvider.credentialWithIDToken(
idToken,
rawNonce,
fullName,
);
await FirebaseAuth.instance.signInWithCredential(credential);
إبطال رموز المصادقة من 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!);
}
Apple Game Center (على أجهزة Apple فقط)
تأكَّد من تفعيل موفِّر تسجيل الدخول "Game Center" في وحدة تحكّم Firebase (انتقِل إلى علامة التبويب الأمان > المصادقة > طريقة تسجيل الدخول). اتّبِع هذه التعليمات لإعداد مشروع "Game Center" على Firebase.
عليك تسجيل الدخول باستخدام Game Center قبل أن يتم إصدار بيانات اعتماد "Game Center" على Firebase وتسجيل الدخول من خلال Firebase. في ما يلي بعض التعليمات حول كيفية تحقيق ذلك.
iOS+
Future<void> _signInWithGameCenter() async {
final credential = GameCenterAuthProvider.credential();
await FirebaseAuth.instance
.signInWithCredential(credential);
}
Microsoft
iOS+
قبل البدء، عليك إعداد ميزة "تسجيل الدخول باستخدام حساب Microsoft" لنظام التشغيل iOS وإضافة مخططات عناوين URL المخصّصة إلى تطبيق Runner (الخطوة 1).
Android
قبل البدء، عليك إعداد ميزة "تسجيل الدخول باستخدام حساب 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 مع ضبط مفتاح واجهة برمجة التطبيقات وواجهة برمجة تطبيقات سرّية
(انتقِل إلى علامة التبويب الأمان > المصادقة >
طريقة تسجيل الدخول).
تأكَّد من ضبط معرّف الموارد المنتظم (URI) لإعادة التوجيه عبر OAuth من Firebase (مثل
my-app-12345.firebaseapp.com/__/auth/handler)
كعنوان URL لرد الاتصال الخاص بالتفويض في صفحة إعدادات تطبيقك على
إعدادات تطبيق Twitter.
قد تحتاج أيضًا إلى طلب وصول موسّع إلى واجهة برمجة التطبيقات حسب تطبيقك .
iOS+
عليك ضبط مخطط URL مخصّص كما هو موضّح في الخطوة 1 من دليل iOS.
Android
إذا لم يسبق لك إجراء ذلك، حدِّد الملف المرجعي SHA-1 لتطبيقك:
في وحدة تحكّم Firebase، انتقِل إلى علامة التبويب
الإعدادات > الإعدادات العامة.انتقِل إلى أسفل بطاقة تطبيقاتك ، واختَر تطبيق Android، وأضِف الملف المرجعي SHA-1 في حقل الملفات المرجعية لشهادة SHA.
يمكنك الاطّلاع على مقالة مصادقة العميل للحصول على تفاصيل حول كيفية الحصول على الملف المرجعي SHA لتطبيقك.
الويب
يمكن استخدامه على الفور.
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.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 المخصّصة إلى تطبيق Runner (الخطوة 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`
ربط موفِّر مصادقة
إذا أردت ربط موفِّر بمستخدم حالي، يمكنك استخدام الطريقة التالية:
await FirebaseAuth.instance.signInAnonymously();
final appleProvider = AppleAuthProvider();
if (kIsWeb) {
await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);
// You can also use `linkWithRedirect`
} else {
await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider);
}
// You're anonymous user is now upgraded to be able to connect with Sign In With 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