Android-এ একটি অ্যাকাউন্টে একাধিক প্রমাণীকরণ প্রদানকারীকে লিঙ্ক করুন

আপনি একটি বিদ্যমান ব্যবহারকারীর অ্যাকাউন্টে প্রমাণীকরণ প্রদানকারীর শংসাপত্র লিঙ্ক করে একাধিক প্রমাণীকরণ প্রদানকারী ব্যবহার করে ব্যবহারকারীদের আপনার অ্যাপে সাইন ইন করার অনুমতি দিতে পারেন। ব্যবহারকারীরা সাইন ইন করতে যে প্রমাণীকরণ প্রদানকারীই ব্যবহার করুক না কেন একই Firebase ব্যবহারকারী আইডি দ্বারা শনাক্ত করা যায়৷ উদাহরণস্বরূপ, যে ব্যবহারকারী একটি পাসওয়ার্ড দিয়ে সাইন ইন করেছেন সে একটি Google অ্যাকাউন্ট লিঙ্ক করতে পারে এবং ভবিষ্যতে যেকোনো পদ্ধতিতে সাইন ইন করতে পারে৷ অথবা, একজন বেনামী ব্যবহারকারী একটি Facebook অ্যাকাউন্ট লিঙ্ক করতে পারেন এবং তারপরে, আপনার অ্যাপ ব্যবহার চালিয়ে যেতে Facebook-এ সাইন ইন করতে পারেন।

আপনি শুরু করার আগে

আপনার অ্যাপে দুই বা ততোধিক প্রমাণীকরণ প্রদানকারীর জন্য সমর্থন যোগ করুন (সম্ভবত বেনামী প্রমাণীকরণ সহ)।

একটি বিদ্যমান ব্যবহারকারী অ্যাকাউন্টে প্রমাণীকরণ প্রদানকারীর শংসাপত্রগুলি লিঙ্ক করতে:

  1. যেকোনো প্রমাণীকরণ প্রদানকারী বা পদ্ধতি ব্যবহার করে ব্যবহারকারীকে সাইন ইন করুন।
  2. FirebaseAuth.signInWith পদ্ধতিগুলির একটিতে কল করা পর্যন্ত নতুন প্রমাণীকরণ প্রদানকারীর জন্য সাইন-ইন প্রবাহ সম্পূর্ণ করুন, কিন্তু অন্তর্ভুক্ত নয়। উদাহরণস্বরূপ, ব্যবহারকারীর গুগল আইডি টোকেন, ফেসবুক অ্যাক্সেস টোকেন বা ইমেল এবং পাসওয়ার্ড পান।
  3. নতুন প্রমাণীকরণ প্রদানকারীর জন্য একটি AuthCredential পান:

    Google সাইন-ইন

    Kotlin+KTX

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)

    Java

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
    ফেসবুক লগইন

    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);
  4. সাইন-ইন করা ব্যবহারকারীর linkWithCredential পদ্ধতিতে AuthCredential অবজেক্টটি পাস করুন:

    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
                    // ...
                }
            }
        });