Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

چندین ارائه دهنده Auth را به یک حساب در Android پیوند دهید

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

می‌توانید به کاربران اجازه دهید با استفاده از چندین ارائه‌دهنده احراز هویت، با پیوند دادن اعتبار ارائه‌دهنده تأیید اعتبار به یک حساب کاربری موجود، به برنامه شما وارد شوند. کاربران با همان شناسه کاربر Firebase بدون توجه به ارائه‌دهنده احراز هویتی که برای ورود به سیستم استفاده کرده‌اند، قابل شناسایی هستند. برای مثال، کاربری که با رمز ورود وارد شده است، می‌تواند یک حساب Google را پیوند داده و در آینده با هر روشی وارد شود. یا، یک کاربر ناشناس می‌تواند یک حساب فیس‌بوک را پیوند دهد و بعداً برای ادامه استفاده از برنامه شما، با فیس‌بوک وارد شود.

قبل از اینکه شروع کنی

پشتیبانی از دو یا چند ارائه دهنده احراز هویت (احتمالاً احراز هویت ناشناس) را به برنامه خود اضافه کنید.

برای پیوند دادن اطلاعات کاربری ارائه‌دهنده تأیید اعتبار به یک حساب کاربری موجود:

  1. با استفاده از هر ارائه دهنده یا روش احراز هویت، کاربر را وارد کنید.
  2. جریان ورود به سیستم ارائه‌دهنده احراز هویت جدید را تا فراخوانی یکی از روش‌های FirebaseAuth.signInWith ، اما بدون احراز هویت، تکمیل کنید. به عنوان مثال، کد Google ID کاربر، رمز دسترسی فیس بوک، یا ایمیل و رمز عبور کاربر را دریافت کنید.
  3. یک 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)
  4. شیء 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
                // ...
            }
        }