ربط عدة مقدّمي خدمات مصادقة بحساب
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام طرق مصادقة متعددة.
Google من خلال ربط بيانات اعتماد موفّر المصادقة بحساب مستخدم حالي.
يمكن التعرّف على المستخدمين من خلال رقم تعريف مستخدم Firebase نفسه بغض النظر عن
المستخدم الذي استخدمه لتسجيل الدخول على سبيل المثال، قد يُدخل المستخدم الذي سجّل الدخول
باستخدام كلمة مرور، يمكنك ربط حساب Google وتسجيل الدخول بأي من الطريقتين في
المستقبلية. أو يمكن لمستخدم مجهول ربط حساب Facebook، ثم يقوم بالتوقيع
مع Facebook لمواصلة استخدام تطبيقك.
قبل البدء
أضِف دعمًا لاثنين أو أكثر من موفري المصادقة (بما في ذلك
مصادقة مجهولة الهوية) لتطبيقك.
ربط بيانات اعتماد موفّر المصادقة بحساب مستخدم
لربط بيانات اعتماد موفّر المصادقة بحساب مستخدم حالي:
سجِّل دخول المستخدم باستخدام أي موفِّر مصادقة أو طريقة مصادقة.
إكمال خطوات تسجيل الدخول لموفِّر المصادقة الجديد حتى
بما في ذلك، استدعاء إحدى الطرق-signInWith
. على سبيل المثال، احصل على
رمز معرّف Google للمستخدم أو رمز الدخول إلى Facebook أو البريد الإلكتروني وكلمة المرور.
احصل على عنصر Credential
لموفِّر المصادقة الجديد:
// Google Sign-in
final credential = GoogleAuthProvider.credential(idToken: idToken);
// Email and password sign-in
final credential =
EmailAuthProvider.credential(email: emailAddress, password: password);
// Etc.
تمرير كائن Credential
إلى linkWithCredential()
الخاص بالمستخدم الذي سجّل الدخول
:
try {
final userCredential = await FirebaseAuth.instance.currentUser
?.linkWithCredential(credential);
} on FirebaseAuthException catch (e) {
switch (e.code) {
case "provider-already-linked":
print("The provider has already been linked to the user.");
break;
case "invalid-credential":
print("The provider's credential is not valid.");
break;
case "credential-already-in-use":
print("The account corresponding to the credential already exists, "
"or is already linked to a Firebase User.");
break;
// See the API reference for the full list of error codes.
default:
print("Unknown error.");
}
```
إذا نجحت المكالمة إلى linkWithCredential()
، يمكن للمستخدم الآن تسجيل الدخول باستخدام
أي موفِّر مصادقة مرتبط والوصول إلى بيانات Firebase نفسها.
إلغاء ربط موفِّر مصادقة بحساب مستخدم
يمكنك إلغاء ربط موفِّر مصادقة بأحد الحسابات، حتى لا يتمكن المستخدم
يمكنك تسجيل الدخول لمدة أطول مع مزوّد الخدمة هذا.
لإلغاء ربط موفِّر مصادقة بحساب مستخدم، مرِّر رقم تعريف المزوّد إلى
طريقة unlink()
. يمكنك الحصول على أرقام تعريف موفّري المصادقة المرتبطين بـ
مستخدِم من السمة providerData
لكائن User
.
try {
await FirebaseAuth.instance.currentUser?.unlink(providerId);
} on FirebaseAuthException catch (e) {
switch (e.code) {
case "no-such-provider":
print("The user isn't linked to the provider or the provider "
"doesn't exist.");
break;
default:
print("Unknown error.");
}
}
إنّ محتوى هذه الصفحة مرخّص بموجب ترخيص Creative Commons Attribution 4.0 ما لم يُنصّ على خلاف ذلك، ونماذج الرموز مرخّصة بموجب ترخيص Apache 2.0. للاطّلاع على التفاصيل، يُرجى مراجعة سياسات موقع Google Developers. إنّ Java هي علامة تجارية مسجَّلة لشركة Oracle و/أو شركائها التابعين.
تاريخ التعديل الأخير: 2025-07-25 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2025-07-25 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["\u003cbr /\u003e\n\nYou can allow users to sign in to your app using multiple authentication\nproviders by linking auth provider credentials to an existing user account.\nUsers are identifiable by the same Firebase user ID regardless of the\nauthentication provider they used to sign in. For example, a user who signed in\nwith a password can link a Google account and sign in with either method in the\nfuture. Or, an anonymous user can link a Facebook account and then, later, sign\nin with Facebook to continue using your app.\n\nBefore you begin\n\nAdd support for two or more authentication providers (possibly including\nanonymous authentication) to your app.\n\nLink auth provider credentials to a user account\n\nTo link auth provider credentials to an existing user account:\n\n1. Sign in the user using any authentication provider or method.\n\n2. Complete the sign-in flow for the new authentication provider up to, but not\n including, calling one of the `signInWith`- methods. For example, get\n the user's Google ID token, Facebook access token, or email and password.\n\n3. Get a `Credential` object for the new authentication provider:\n\n // Google Sign-in\n final credential = GoogleAuthProvider.credential(idToken: idToken);\n\n // Email and password sign-in\n final credential =\n EmailAuthProvider.credential(email: emailAddress, password: password);\n\n // Etc.\n\n4. Pass the `Credential` object to the sign-in user's `linkWithCredential()`\n method:\n\n try {\n final userCredential = await FirebaseAuth.instance.currentUser\n ?.linkWithCredential(credential);\n } on FirebaseAuthException catch (e) {\n switch (e.code) {\n case \"provider-already-linked\":\n print(\"The provider has already been linked to the user.\");\n break;\n case \"invalid-credential\":\n print(\"The provider's credential is not valid.\");\n break;\n case \"credential-already-in-use\":\n print(\"The account corresponding to the credential already exists, \"\n \"or is already linked to a Firebase User.\");\n break;\n // See the API reference for the full list of error codes.\n default:\n print(\"Unknown error.\");\n }\n ```\n\nIf the call to `linkWithCredential()` succeeds, the user can now sign in using\nany linked authentication provider and access the same Firebase data.\n\nUnlink an auth provider from a user account\n\nYou can unlink an auth provider from an account, so that the user can no\nlonger sign in with that provider.\n\nTo unlink an auth provider from a user account, pass the provider ID to the\n`unlink()` method. You can get the provider IDs of the auth providers linked to\na user from the `User` object's `providerData` property. \n\n try {\n await FirebaseAuth.instance.currentUser?.unlink(providerId);\n } on FirebaseAuthException catch (e) {\n switch (e.code) {\n case \"no-such-provider\":\n print(\"The user isn't linked to the provider or the provider \"\n \"doesn't exist.\");\n break;\n default:\n print(\"Unknown error.\");\n }\n }"]]