المصادقة عبر وسائل التواصل الاجتماعي هي عملية مصادقة متعدّدة الخطوات، تتيح لك تسجيل دخول المستخدم إلى حساب أو ربطه بحساب حالي.
تتيح كلّ من المنصّات الأصلية والويب إنشاء بيانات اعتماد يمكن بعد ذلك تمريرها إلى الطريقتَين 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);
}
الويب
على الويب، توفّر حزمة تطوير البرامج (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" في وحدة تحكّم Firebase (انتقِل إلى علامة التبويب الأمان > المصادقة > طريقة تسجيل الدخول). اتّبِع هذه التعليمات بشأن إعداد مشروع Firebase في "ألعاب Play".
اتّبِع هذه التعليمات لإعداد "خدمات ألعاب 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
على المنصات الأصلية، يجب توفّر مكتبة تابعة لجهة خارجية لتثبيت حزمة تطوير البرامج (SDK) من Facebook وتفعيل مسار المصادقة.
ثبِّت المكوّن الإضافي flutter_facebook_auth.
عليك اتّباع الخطوات الواردة في مستندات المكوّن الإضافي للتأكّد من أنّه تم إعداد كلّ من حِزمتَي تطوير البرامج (SDK) لنظامَي التشغيل Android وiOS من Facebook بشكل صحيح. بعد اكتمال العملية، شغِّل عملية تسجيل الدخول، وأنشِئ بيانات اعتماد على 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 كمعرّف صالح لإعادة التوجيه خاص ببروتوكول 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 قبل أن يتم إصدار بيانات اعتماد Firebase Game Center وتسجيل الدخول من خلال 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 المخصّص كما هو موضّح في الخطوة 1 من دليل iOS.
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}
الويب
على الويب، توفّر حزمة تطوير البرامج (SDK) من GitHub إمكانية التعامل تلقائيًا مع مسار المصادقة باستخدام تفاصيل تطبيق 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) الخاص بإعادة التوجيه في Firebase OAuth (على سبيل المثال، my-app-12345.firebaseapp.com/__/auth/handler) كمعرّف موارد منتظم (URI) خاص بإعادة التوجيه في إعدادات شبكة مطوّري Yahoo في تطبيقك.
iOS+
قبل البدء، اضبط إعدادات تسجيل الدخول باستخدام Yahoo على أجهزة iOS وأضِف مخططات عناوين URL المخصّصة إلى Runner (الخطوة 1).
Android
قبل البدء، عليك ضبط إعدادات Yahoo Login على جهاز 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