شما میتوانید با پیوند دادن اعتبارنامههای ارائهدهندهی احراز هویت به یک حساب کاربری موجود، به کاربران اجازه دهید با استفاده از چندین ارائهدهندهی احراز هویت به برنامهی شما وارد شوند. کاربران صرف نظر از ارائهدهندهی احراز هویتی که برای ورود به سیستم استفاده کردهاند، با همان شناسهی کاربری Firebase قابل شناسایی هستند. به عنوان مثال، کاربری که با رمز عبور وارد سیستم شده است، میتواند یک حساب گوگل را پیوند دهد و در آینده با هر دو روش وارد سیستم شود. یا، یک کاربر ناشناس میتواند یک حساب فیسبوک را پیوند دهد و سپس، بعداً، برای ادامهی استفاده از برنامهی شما، با فیسبوک وارد سیستم شود.
قبل از اینکه شروع کنی
پشتیبانی از دو یا چند ارائهدهندهی احراز هویت (احتمالاً شامل احراز هویت ناشناس) را به برنامهی خود اضافه کنید.
اعتبارنامههای ارائهدهندهی احراز هویت را به یک حساب کاربری پیوند دهید
برای پیوند دادن اعتبارنامههای ارائهدهندهی احراز هویت به یک حساب کاربری موجود:
- کاربر را با استفاده از هر ارائه دهنده یا روش احراز هویتی وارد سیستم کنید.
- جریان ورود به سیستم را برای ارائهدهندهی احراز هویت جدید تا فراخوانی یکی از متدهای
FirebaseAuth.signInWithتکمیل کنید، اما این شامل آن نمیشود. برای مثال، توکن شناسهی گوگل کاربر، توکن دسترسی فیسبوک یا ایمیل و رمز عبور را دریافت کنید. برای ارائه دهنده احراز هویت جدید، یک
AuthCredentialدریافت کنید:ورود به سیستم گوگل
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 میتواند چندین ارائهدهندهی احراز هویت (مثلاً ایمیل/رمز عبور، گوگل، فیسبوک) داشته باشد که به کاربر اجازه میدهد از طریق روشهای مختلف به یک حساب 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 // ... } } });
عیبیابی
اگر هنگام تلاش برای پیوند دادن چندین حساب با خطا مواجه شدید، به مستندات مربوط به آدرسهای ایمیل تأیید شده مراجعه کنید.