يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام عدة موفِّري مصادقة من خلال ربط بيانات اعتماد موفِّر المصادقة بحساب مستخدم حالي. ويمكن التعرّف على المستخدمين من خلال رقم تعريف مستخدم Firebase نفسه بغض النظر عن موفِّر المصادقة الذي تم استخدامه لتسجيل الدخول. على سبيل المثال، يمكن للمستخدم الذي سجّل الدخول باستخدام كلمة مرور ربط حساب Google وتسجيل الدخول بأي من الطريقتين في المستقبل. أو يمكن للمستخدم المجهول ربط حساب Facebook ثم تسجيل الدخول لاحقًا باستخدام Facebook لمتابعة استخدام التطبيق.
قبل البدء
أضِف إلى تطبيقك دعمًا لاثنين أو أكثر من مزوّدي خدمات المصادقة (ربما يشمل ذلك المصادقة المجهولة).
ربط بيانات اعتماد موفّر المصادقة بحساب مستخدم
لربط بيانات اعتماد موفّر المصادقة بحساب مستخدم حالي:
- سجِّل دخول المستخدم باستخدام أي موفِّر مصادقة أو طريقة مصادقة.
- أكمِل إجراءات تسجيل الدخول لموفِّر المصادقة الجديد بما يصل إلى
استدعاء إحدى طرق
FirebaseAuth.signInWith
، ولا يشمل ذلك. على سبيل المثال، يمكنك الحصول على رمز المستخدم المميز لمعرّف Google أو رمز الدخول إلى Facebook أو البريد الإلكتروني وكلمة المرور. احصل على
AuthCredential
لموفِّر المصادقة الجديد:تسجيل الدخول بحساب Google
Kotlin+KTX
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
Java
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
تسجيل الدخول إلى Facebook
Kotlin+KTX
val credential = FacebookAuthProvider.getCredential(token.token)
Java
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
تسجيل الدخول باستخدام كلمة مرور البريد الإلكتروني
Kotlin+KTX
val credential = EmailAuthProvider.getCredential(email, password)
Java
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
مرِّر الكائن
AuthCredential
إلى طريقةlinkWithCredential
الخاصة بالمستخدم الذي سجّل الدخول:Kotlin+KTX
auth.currentUser!!.linkWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { Log.d(TAG, "linkWithCredential:success") val user = task.result?.user updateUI(user) } else { Log.w(TAG, "linkWithCredential:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.getCurrentUser().linkWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Log.d(TAG, "linkWithCredential:success"); FirebaseUser user = task.getResult().getUser(); updateUI(user); } else { Log.w(TAG, "linkWithCredential:failure", task.getException()); Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
سيتعذر الاتصال بطلب
linkWithCredential
إذا كانت بيانات الاعتماد مرتبطة بحساب مستخدم آخر. وفي هذه الحالة، يجب التعامل مع عملية دمج الحسابات والبيانات المرتبطة بها على النحو المناسب لتطبيقك:Kotlin+KTX
val prevUser = auth.currentUser auth.signInWithCredential(credential) .addOnSuccessListener { result -> val currentUser = result.user // Merge prevUser and currentUser accounts and data // ... } .addOnFailureListener { // ... }
Java
FirebaseUser prevUser = FirebaseAuth.getInstance().getCurrentUser(); mAuth.signInWithCredential(credential) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { FirebaseUser currentUser = task.getResult().getUser(); // Merge prevUser and currentUser accounts and data // ... } });
إذا نجح الاتصال إلى linkWithCredential
، يمكن للمستخدم الآن تسجيل الدخول باستخدام أي موفِّر مصادقة مرتبط والوصول إلى بيانات Firebase نفسها.
إلغاء ربط موفِّر مصادقة بحساب مستخدم
يمكنك إلغاء ربط موفِّر مصادقة بحساب، حتى لا يتمكّن المستخدم من تسجيل الدخول من خلال ذلك الحساب مرة أخرى.
لإلغاء ربط موفِّر مصادقة بحساب مستخدم، أرسِل رقم تعريف مقدِّم الخدمة إلى الطريقة unlink
. يمكنك جعل معرّفات موفِّري المصادقة مرتبطة بالمستخدم من خلال الاتصال بالرقم
getProviderData
.
Kotlin+KTX
Firebase.auth.currentUser!!.unlink(providerId) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Auth provider unlinked from account // ... } }
Java
mAuth.getCurrentUser().unlink(providerId) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Auth provider unlinked from account // ... } } });