আপনি ব্যবহারকারীদের একাধিক প্রমাণীকরণ প্রদানকারী ব্যবহার করে আপনার অ্যাপে সাইন ইন করার অনুমতি দিতে পারেন, একটি বিদ্যমান ব্যবহারকারী অ্যাকাউন্টের সাথে প্রমাণীকরণ প্রদানকারীর শংসাপত্র লিঙ্ক করে। ব্যবহারকারীরা সাইন ইন করার জন্য যে প্রমাণীকরণ প্রদানকারী ব্যবহার করুক না কেন, একই Firebase ব্যবহারকারী আইডি দ্বারা শনাক্ত করা যাবে। উদাহরণস্বরূপ, পাসওয়ার্ড দিয়ে সাইন ইন করা একজন ব্যবহারকারী ভবিষ্যতে একটি Google অ্যাকাউন্ট লিঙ্ক করতে পারেন এবং যেকোনো পদ্ধতিতে সাইন ইন করতে পারেন। অথবা, একজন বেনামী ব্যবহারকারী একটি Facebook অ্যাকাউন্ট লিঙ্ক করতে পারেন এবং পরে, আপনার অ্যাপ ব্যবহার চালিয়ে যেতে Facebook-এ সাইন ইন করতে পারেন।
শুরু করার আগে
আপনার অ্যাপে দুই বা ততোধিক প্রমাণীকরণ প্রদানকারীর (সম্ভবত বেনামী প্রমাণীকরণ সহ) জন্য সমর্থন যোগ করুন।
একটি ব্যবহারকারী অ্যাকাউন্টের সাথে প্রমাণীকরণ প্রদানকারীর শংসাপত্র লিঙ্ক করুন
একটি বিদ্যমান ব্যবহারকারী অ্যাকাউন্টের সাথে auth প্রদানকারীর শংসাপত্র লিঙ্ক করতে:
- যেকোনো প্রমাণীকরণ প্রদানকারী বা পদ্ধতি ব্যবহার করে ব্যবহারকারীকে সাইন ইন করুন।
- নতুন প্রমাণীকরণ প্রদানকারীর জন্য
FirebaseAuth.signInWithপদ্ধতিগুলির মধ্যে একটিতে কল করা পর্যন্ত সাইন-ইন প্রবাহ সম্পূর্ণ করুন, কিন্তু অন্তর্ভুক্ত নয়। উদাহরণস্বরূপ, ব্যবহারকারীর Google ID টোকেন, Facebook অ্যাক্সেস টোকেন, অথবা ইমেল এবং পাসওয়ার্ড পান। নতুন প্রমাণীকরণ প্রদানকারীর জন্য একটি
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);
সাইন-ইন করা ব্যবহারকারীর
linkWithCredentialপদ্ধতিতেAuthCredentialঅবজেক্টটি পাস করুন: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 // ... } } });
সমস্যা সমাধান
একাধিক অ্যাকাউন্ট লিঙ্ক করার সময় যদি আপনি ত্রুটির সম্মুখীন হন, তাহলে যাচাইকৃত ইমেল ঠিকানাগুলিতে ডকুমেন্টেশন দেখুন।