میتوانید به کاربران اجازه دهید با پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربری موجود، بااستفاده از چندین ارائهدهنده اصالتسنجی به سیستم برنامهتان وارد شوند. کاربران صرفنظر از ارائهدهنده اصالتسنجی که برای ورود به سیستم استفاده کردهاند، با همان شناسه کاربر Firebase قابلشناسایی هستند. برای مثال، کاربری که با گذرواژه به سیستم وارد شده است میتواند «حساب Google» را پیوند دهد و در آینده با هریک از این روشها به سیستم وارد شود. یا، کاربر ناشناسی میتواند حساب Facebook را پیوند دهد و سپس، بعداً با Facebook به سیستم وارد شود تا به استفاده از برنامه شما ادامه دهد.
قبل از شروع
پشتیبانی از دو یا چند ارائهدهنده اصالتسنجی (احتمالاً شامل اصالتسنجی ناشناس) را به برنامهتان اضافه کنید.
پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربر
برای پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربری موجود:
- کاربر را بااستفاده از هر روش یا ارائهدهنده اصالتسنجی به سیستم وارد کنید.
- جریان ورود به سیستم را برای ارائهدهنده اصالتسنجی جدید تا مرحله فراخوانی یکی از روشهای
FirebaseAuth.signInWithتکمیل کنید، اما این مرحله را شامل نشود. برای مثال، گذرکلید Google کاربر، گذرکلید دسترسی Facebook، یا ایمیل و گذرواژه را دریافت کنید.
AuthCredentialرا برای ارائهدهنده اصالتسنجی جدید دریافت کنید:ورود با Google
Kotlin
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
Java
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
ورود به سیستم فیسبوک
Kotlin
val credential = FacebookAuthProvider.getCredential(token.token)
Java
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
ورود به سیستم با ایمیل و گذرواژه
Kotlin
val credential = EmailAuthProvider.getCredential(email, password)
Java
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
شیء
AuthCredentialرا به روشlinkWithCredentialکاربر واردشده به سیستم ارسال کنید:Kotlin
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
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 دسترسی پیدا کند.
لغو پیوند ارائهدهنده اصالتسنجی از حساب کاربر
یک حساب کاربری Firebase میتواند چندین ارائهدهنده اصالتسنجی پیوندشده داشته باشد (برای مثال، ایمیل/گذرواژه، Google، Facebook)، که به کاربر امکان میدهد ازطریق روشهای مختلف به همان حساب Firebase وارد شود.
اگر ارائهدهنده اصالتسنجی را از حساب کاربری لغو پیوند کنید، کاربر دیگر نمیتواند با آن ارائهدهنده به سیستم وارد شود.
برای لغو پیوند ارائهدهنده اصالتسنجی از حساب کاربر، شناسه ارائهدهنده را به
متد unlink ارسال کنید. میتوانید شناسههای ارائهدهنده ارائهدهندگان اصالتسنجی
پیوندشده به کاربر را با فراخوانی
getProviderData دریافت کنید.
Kotlin
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 // ... } } });
عیبیابی
اگر هنگام تلاش برای پیوند دادن چند حساب با خطا مواجه شدید، مستندات مربوط به نشانیهای ایمیل تأییدشده را ببینید.