يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام طرق مصادقة متعددة. Google من خلال ربط بيانات اعتماد موفّر المصادقة بحساب مستخدم حالي. يمكن التعرّف على المستخدمين من خلال رقم تعريف مستخدم 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 // ... } } });