میتوانید به کاربران اجازه دهید با استفاده از چندین ارائهدهنده احراز هویت، با پیوند دادن اعتبار ارائهدهنده تأیید اعتبار به یک حساب کاربری موجود، به برنامه شما وارد شوند. کاربران با همان شناسه کاربر Firebase بدون توجه به ارائهدهنده احراز هویتی که برای ورود به سیستم استفاده کردهاند، قابل شناسایی هستند. برای مثال، کاربری که با رمز ورود وارد شده است، میتواند یک حساب Google را پیوند داده و در آینده با هر روشی وارد شود. یا، یک کاربر ناشناس میتواند یک حساب فیسبوک را پیوند دهد و بعداً برای ادامه استفاده از برنامه شما، با فیسبوک وارد شود.
قبل از اینکه شروع کنی
پشتیبانی از دو یا چند ارائه دهنده احراز هویت (احتمالاً احراز هویت ناشناس) را به برنامه خود اضافه کنید.
اعتبار ارائه دهنده تأیید اعتبار را به یک حساب کاربری پیوند دهید
برای پیوند دادن اطلاعات کاربری ارائهدهنده تأیید اعتبار به یک حساب کاربری موجود:
- با استفاده از هر ارائه دهنده یا روش احراز هویت، کاربر را وارد کنید.
- جریان ورود به سیستم ارائهدهنده احراز هویت جدید را تا فراخوانی یکی از روشهای
FirebaseAuth.signInWith
، اما بدون احراز هویت، تکمیل کنید. به عنوان مثال، کد Google ID کاربر، رمز دسترسی فیس بوک، یا ایمیل و رمز عبور کاربر را دریافت کنید. یک
AuthCredential
برای ارائه دهنده احراز هویت جدید دریافت کنید:ورود به سیستم گوگل
Java
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
Kotlin+KTX
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
ورود به فیس بوک
Java
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
Kotlin+KTX
val credential = FacebookAuthProvider.getCredential(token.token)
ورود به سیستم با رمز عبور ایمیل
Java
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
Kotlin+KTX
val credential = EmailAuthProvider.getCredential(email, password)
شیء
AuthCredential
را به متدlinkWithCredential
کاربر وارد شده ارسال کنید: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); } } });
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) } }
اگر اعتبارنامه ها قبلاً به حساب کاربری دیگری پیوند داده شده باشند، تماس با
linkWithCredential
ناموفق خواهد بود. در این شرایط، باید ادغام حسابها و دادههای مرتبط با برنامه خود را انجام دهید: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 // ... } });
Kotlin+KTX
val prevUser = auth.currentUser auth.signInWithCredential(credential) .addOnSuccessListener { result -> val currentUser = result.user // Merge prevUser and currentUser accounts and data // ... } .addOnFailureListener { // ... }
اگر تماس با linkWithCredential
با موفقیت انجام شود، کاربر اکنون میتواند با استفاده از هر ارائهدهنده احراز هویت پیوندی وارد شده و به همان دادههای Firebase دسترسی داشته باشد.
لغو پیوند یک ارائه دهنده تأیید اعتبار از یک حساب کاربری
میتوانید پیوند یک ارائهدهنده تأیید اعتبار را از یک حساب لغو کنید تا کاربر دیگر نتواند با آن ارائهدهنده وارد شود.
برای لغو پیوند یک ارائهدهنده تأیید اعتبار از یک حساب کاربری، شناسه ارائهدهنده را به روش unlink
ارسال کنید. با تماس گرفتن با getProviderData
میتوانید شناسههای ارائهدهنده ارائهدهندگان تأیید اعتبار مرتبط با یک کاربر را دریافت کنید.
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 // ... } } });
Kotlin+KTX
Firebase.auth.currentUser!!.unlink(providerId) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Auth provider unlinked from account // ... } }