অ্যান্ড্রয়েডে ইমেল লিঙ্ক ব্যবহার করে ফায়ারবেসের সাথে প্রমাণীকরণ করুন

আপনি Firebase Authentication ব্যবহার করে কোনো ব্যবহারকারীকে একটি লিঙ্কসহ ইমেল পাঠিয়ে সাইন ইন করাতে পারেন, যেখানে ক্লিক করে তিনি সাইন ইন করতে পারবেন। এই প্রক্রিয়ায় ব্যবহারকারীর ইমেল অ্যাড্রেসটিও যাচাই করা হয়।

ইমেইলের মাধ্যমে সাইন ইন করার অনেক সুবিধা রয়েছে:

  • সহজ সাইন-আপ এবং সাইন-ইন।
  • বিভিন্ন অ্যাপ্লিকেশনে পাসওয়ার্ড পুনরায় ব্যবহারের ঝুঁকি কমে যায়, যা এমনকি ভালোভাবে নির্বাচিত পাসওয়ার্ডের নিরাপত্তাকেও দুর্বল করে দিতে পারে।
  • কোনো ব্যবহারকারীকে প্রমাণীকরণের পাশাপাশি তিনি যে একটি ইমেইল ঠিকানার বৈধ মালিক, তা যাচাই করার ক্ষমতা।
  • সাইন ইন করার জন্য ব্যবহারকারীর শুধুমাত্র একটি অ্যাক্সেসযোগ্য ইমেল অ্যাকাউন্ট প্রয়োজন। কোনো ফোন নম্বর বা সোশ্যাল মিডিয়া অ্যাকাউন্টের মালিকানার প্রয়োজন নেই।
  • ব্যবহারকারী পাসওয়ার্ড দেওয়া (বা মনে রাখার) প্রয়োজন ছাড়াই নিরাপদে সাইন ইন করতে পারেন, যা মোবাইল ডিভাইসে বেশ ঝামেলার হতে পারে।
  • একজন বিদ্যমান ব্যবহারকারী যিনি পূর্বে ইমেল আইডেন্টিফায়ার (পাসওয়ার্ড বা ফেডারেটেড) দিয়ে সাইন ইন করতেন, তাকে শুধুমাত্র ইমেল দিয়ে সাইন ইন করার জন্য আপগ্রেড করা যেতে পারে। উদাহরণস্বরূপ, একজন ব্যবহারকারী যিনি তার পাসওয়ার্ড ভুলে গেছেন, তিনি পাসওয়ার্ড রিসেট করার প্রয়োজন ছাড়াই সাইন ইন করতে পারবেন।

শুরু করার আগে

আপনার অ্যান্ড্রয়েড প্রজেক্ট সেট আপ করুন

  1. যদি আগে থেকে না করে থাকেন, তাহলে আপনার অ্যান্ড্রয়েড প্রজেক্টে ফায়ারবেস যোগ করুন

  2. আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts অথবা <project>/<app-module>/build.gradle ), অ্যান্ড্রয়েডের জন্য Firebase Authentication লাইব্রেরির ডিপেন্ডেন্সি যোগ করুন। লাইব্রেরির ভার্সনিং নিয়ন্ত্রণের জন্য আমরা Firebase Android BoM ব্যবহার করার পরামর্শ দিই।

    এছাড়াও, Firebase Authentication সেট আপ করার অংশ হিসেবে, আপনাকে আপনার অ্যাপে Google Play services SDK যোগ করতে হবে।

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.11.0"))
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.5.1")
    }

    Firebase Android BoM ব্যবহার করলে, আপনার অ্যাপ সর্বদা Firebase Android লাইব্রেরিগুলোর সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

    (বিকল্প) BoM ব্যবহার না করে ফায়ারবেস লাইব্রেরি নির্ভরতা যোগ করুন

    আপনি যদি Firebase BoM ব্যবহার না করার সিদ্ধান্ত নেন, তাহলে আপনাকে প্রতিটি Firebase লাইব্রেরির ভার্সন তার ডিপেন্ডেন্সি লাইনে উল্লেখ করতে হবে।

    মনে রাখবেন, আপনি যদি আপনার অ্যাপে একাধিক Firebase লাইব্রেরি ব্যবহার করেন, তাহলে আমরা লাইব্রেরির ভার্সনগুলো পরিচালনা করার জন্য BoM অফ মেটেরিয়ালস) ব্যবহার করার জন্য দৃঢ়ভাবে সুপারিশ করি, যা সব ভার্সনের সামঞ্জস্যতা নিশ্চিত করে।

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth:24.0.1")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.5.1")
    }

আপনার Firebase প্রোজেক্টের জন্য ইমেল লিঙ্ক সাইন-ইন সক্রিয় করুন।

ইমেল লিঙ্কের মাধ্যমে ব্যবহারকারীদের সাইন ইন করাতে হলে, আপনাকে প্রথমে আপনার Firebase প্রোজেক্টের জন্য ইমেল প্রোভাইডার এবং ইমেল লিঙ্ক সাইন-ইন পদ্ধতিটি সক্রিয় করতে হবে:

  1. Firebase কনসোলে , Auth সেকশনটি খুলুন।
  2. সাইন ইন পদ্ধতি ট্যাবে, ইমেল/পাসওয়ার্ড প্রদানকারীকে সক্রিয় করুন। মনে রাখবেন যে, ইমেল লিঙ্ক সাইন-ইন ব্যবহার করার জন্য ইমেল/পাসওয়ার্ড সাইন-ইন অবশ্যই সক্রিয় থাকতে হবে।
  3. একই বিভাগে, ইমেল লিঙ্ক (পাসওয়ার্ডবিহীন সাইন-ইন) পদ্ধতিটি সক্রিয় করুন।
  4. সংরক্ষণ করুন- এ ক্লিক করুন।

প্রমাণীকরণ প্রক্রিয়া শুরু করতে, ব্যবহারকারীকে এমন একটি ইন্টারফেস দেখান যেখানে তার ইমেল ঠিকানা দিতে বলা হবে এবং তারপর Firebase-কে ব্যবহারকারীর ইমেলে প্রমাণীকরণ লিঙ্কটি পাঠানোর অনুরোধ জানাতে sendSignInLinkToEmail কল করুন।

  1. ActionCodeSettings অবজেক্টটি তৈরি করুন, যা ফায়ারবেসকে ইমেল লিঙ্কটি কীভাবে তৈরি করতে হবে সে সম্পর্কে নির্দেশনা প্রদান করে। নিম্নলিখিত ফিল্ডগুলি সেট করুন:

    • url : এমবেড করার জন্য ডিপ লিঙ্ক এবং সাথে পাঠানোর জন্য যেকোনো অতিরিক্ত স্টেট। লিঙ্কটির ডোমেইনকে অবশ্যই ফায়ারবেস কনসোলের অনুমোদিত ডোমেইনের তালিকায় হোয়াইটলিস্টেড থাকতে হবে, যা সাইন-ইন মেথড ট্যাবে (অথেন্টিকেশন -> সাইন-ইন মেথড) গিয়ে পাওয়া যাবে। যদি ব্যবহারকারীর ডিভাইসে অ্যাপটি ইনস্টল করা না থাকে বা অ্যাপটি ইনস্টল করা সম্ভব না হয়, তাহলে লিঙ্কটি তাকে এই URL-এ রিডাইরেক্ট করবে।
    • androidPackageName এবং iOSBundleId : এটি Firebase Authentication নির্ধারণ করতে সাহায্য করে যে, এটি একটি শুধুমাত্র-ওয়েব লিঙ্ক তৈরি করবে নাকি মোবাইল লিঙ্ক তৈরি করবে, যা অ্যান্ড্রয়েড বা অ্যাপল ডিভাইসে খোলা হবে।
    • handleCodeInApp : এটিকে true-তে সেট করুন। অন্যান্য আউট-অফ-ব্যান্ড ইমেল অ্যাকশনের (যেমন পাসওয়ার্ড রিসেট এবং ইমেল ভেরিফিকেশন) মতো নয়, সাইন-ইন অপারেশনটি সবসময় অ্যাপের মধ্যেই সম্পন্ন করতে হবে। এর কারণ হলো, ফ্লো-এর শেষে ব্যবহারকারীকে সাইন-ইন করা অবস্থায় এবং তার অথেন্টিকেশন স্টেট অ্যাপের মধ্যেই সংরক্ষিত থাকার কথা।
    • linkDomain : যখন কোনো প্রোজেক্টের জন্য কাস্টম Hosting লিঙ্ক ডোমেইন নির্ধারণ করা হয়, তখন নির্দিষ্ট মোবাইল অ্যাপ দ্বারা লিঙ্কটি খোলার জন্য কোনটি ব্যবহার করা হবে তা নির্দিষ্ট করুন। অন্যথায়, ডিফল্ট ডোমেইন স্বয়ংক্রিয়ভাবে নির্বাচিত হয় (উদাহরণস্বরূপ, PROJECT_ID .firebaseapp.com )
    • dynamicLinkDomain : অপ্রচলিত। এই প্যারামিটারটি উল্লেখ করবেন না।

    Kotlin

    val actionCodeSettings = actionCodeSettings {
        // URL you want to redirect back to. The domain (www.example.com) for this
        // URL must be whitelisted in the Firebase Console.
        url = "https://www.example.com/finishSignUp?cartId=1234"
        // This must be true
        handleCodeInApp = true
        setIOSBundleId("com.example.ios")
        setAndroidPackageName(
            "com.example.android",
            true, // installIfNotAvailable
            "12", // minimumVersion
        )
    }

    Java

    ActionCodeSettings actionCodeSettings =
            ActionCodeSettings.newBuilder()
                    // URL you want to redirect back to. The domain (www.example.com) for this
                    // URL must be whitelisted in the Firebase Console.
                    .setUrl("https://www.example.com/finishSignUp?cartId=1234")
                    // This must be true
                    .setHandleCodeInApp(true)
                    .setIOSBundleId("com.example.ios")
                    .setAndroidPackageName(
                            "com.example.android",
                            true, /* installIfNotAvailable */
                            "12"    /* minimumVersion */)
                    .build();

    ActionCodeSettings সম্পর্কে আরও জানতে, "ইমেল অ্যাকশনে স্টেট পাস করা" বিভাগটি দেখুন।

  2. ব্যবহারকারীর ইমেইল ঠিকানা জিজ্ঞাসা করুন।

  3. ব্যবহারকারীর ইমেইলে প্রমাণীকরণ লিঙ্কটি পাঠান এবং তার ইমেইলটি সংরক্ষণ করুন, যাতে ব্যবহারকারী একই ডিভাইসে ইমেইল সাইন-ইন সম্পন্ন করলে তা কাজে লাগে।

    Kotlin

    Firebase.auth.sendSignInLinkToEmail(email, actionCodeSettings)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "Email sent.")
            }
        }

    Java

    FirebaseAuth auth = FirebaseAuth.getInstance();
    auth.sendSignInLinkToEmail(email, actionCodeSettings)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "Email sent.");
                    }
                }
            });

নিরাপত্তা উদ্বেগ

অনাকাঙ্ক্ষিত ব্যবহারকারী বা অনাকাঙ্ক্ষিত ডিভাইসে সাইন-ইন করার জন্য সাইন-ইন লিঙ্কটি যাতে ব্যবহার করা না যায়, সেজন্য Firebase Authentication সাইন-ইন প্রক্রিয়া সম্পন্ন করার সময় ব্যবহারকারীর ইমেল ঠিকানা প্রদান করা আবশ্যক করে। সাইন-ইন সফল হওয়ার জন্য, এই ইমেল ঠিকানাটি অবশ্যই সেই ঠিকানার সাথে মিলতে হবে যেখানে সাইন-ইন লিঙ্কটি মূলত পাঠানো হয়েছিল।

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

সাইন-ইন সম্পন্ন হওয়ার পর, ব্যবহারকারীর পূর্ববর্তী যেকোনো যাচাইবিহীন সাইন-ইন পদ্ধতি মুছে ফেলা হবে এবং বিদ্যমান সেশনগুলো বাতিল হয়ে যাবে। উদাহরণস্বরূপ, যদি কেউ পূর্বে একই ইমেল এবং পাসওয়ার্ড দিয়ে একটি যাচাইবিহীন অ্যাকাউন্ট তৈরি করে থাকে, তবে ব্যবহারকারীর পাসওয়ার্ডটি মুছে ফেলা হবে, যাতে সেই ছদ্মবেশী ব্যক্তি, যিনি মালিকানা দাবি করে অ্যাকাউন্টটি তৈরি করেছিলেন, তিনি পুনরায় সেই যাচাইবিহীন ইমেল এবং পাসওয়ার্ড দিয়ে সাইন-ইন করতে না পারেন।

এছাড়াও, মধ্যবর্তী সার্ভার দ্বারা আপনার লিঙ্কটি সম্ভাব্যভাবে হস্তগত হওয়া এড়াতে প্রোডাকশনে একটি HTTPS URL ব্যবহার করা নিশ্চিত করুন।

অ্যান্ড্রয়েড অ্যাপে সাইন-ইন সম্পন্ন করা

Firebase Authentication একটি মোবাইল ডিভাইসে ইমেল লিঙ্ক পাঠাতে Firebase Hosting ব্যবহার করে। মোবাইল অ্যাপ্লিকেশনের মাধ্যমে সাইন-ইন সম্পন্ন করার জন্য, অ্যাপ্লিকেশনটিকে আগত অ্যাপ্লিকেশন লিঙ্কটি শনাক্ত করতে, অন্তর্নিহিত ডিপ লিঙ্কটি পার্স করতে এবং তারপরে সাইন-ইন সম্পূর্ণ করতে কনফিগার করতে হবে। আরও জানতে, অ্যান্ড্রয়েড অ্যাপ লিঙ্কস ডকুমেন্টেশন দেখুন।

Firebase Hosting কনফিগার করুন

মোবাইল অ্যাপ্লিকেশনে খোলার জন্য কোনো লিঙ্ক তৈরি ও পাঠানোর সময় Firebase Authentication Firebase Hosting ডোমেইন ব্যবহার করে। আপনার জন্য একটি ডিফল্ট Firebase Hosting ডোমেইন আগে থেকেই কনফিগার করা আছে।

  1. Firebase Hosting ডোমেইনগুলো কনফিগার করুন:

    Firebase কনসোলে, হোস্টিং সেকশনটি খুলুন।

    • মোবাইল অ্যাপ্লিকেশনে খোলা ইমেল লিঙ্কের জন্য যদি আপনি ডিফল্ট ডোমেইন ব্যবহার করতে চান, তাহলে আপনার ডিফল্ট সাইটে যান এবং আপনার ডিফল্ট Hosting ডোমেইনটি নোট করে নিন। একটি ডিফল্ট Hosting ডোমেইন সাধারণত দেখতে এইরকম হয়: PROJECT_ID .firebaseapp.com .

      ইনকামিং লিঙ্কটি গ্রহণ করার জন্য আপনার অ্যাপ কনফিগার করার সময় এই মানটির প্রয়োজন হবে।

    • আপনি যদি ইমেল লিঙ্কের জন্য একটি কাস্টম ডোমেইন ব্যবহার করতে চান, তাহলে আপনি Firebase Hosting এ একটি রেজিস্টার করে লিঙ্কের ডোমেইন হিসেবে সেটি ব্যবহার করতে পারেন।

  2. অ্যান্ড্রয়েড অ্যাপ্লিকেশন কনফিগার করা:

    আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশন থেকে এই লিঙ্কগুলি পরিচালনা করার জন্য, Firebase কনসোল প্রজেক্ট সেটিংসে আপনার অ্যাপের প্যাকেজ নামটি উল্লেখ করতে হবে। এছাড়াও, অ্যাপ্লিকেশন সার্টিফিকেটের SHA-1 এবং SHA-256 প্রদান করতে হবে।

    আপনি যদি এই লিঙ্কগুলিকে একটি নির্দিষ্ট অ্যাক্টিভিটিতে রিডাইরেক্ট করতে চান, তাহলে আপনাকে আপনার AndroidManifest.xml ফাইলে একটি ইন্টেন্ট ফিল্টার কনফিগার করতে হবে। ইন্টেন্ট ফিল্টারটি আপনার ডোমেইনের ইমেল লিঙ্কগুলি শনাক্ত করবে। AndroidManifest.xml এ:

    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.BROWSABLE" />
      <category android:name="android.intent.category.DEFAULT" />
      <data
        android:scheme="https"
        android:host="<PROJECT_ID>.firebaseapp.com or your custom domain"
        android:pathPrefix="/__/auth/links" />
    </intent-filter>
    

    যখন ব্যবহারকারীরা /__/auth/links পাথ এবং আপনার নির্দিষ্ট করা স্কিম ও হোস্ট সহ কোনো হোস্টিং লিঙ্ক খোলে, তখন আপনার অ্যাপ লিঙ্কটি পরিচালনা করার জন্য এই ইন্টেন্ট ফিল্টার সহ অ্যাক্টিভিটিটি শুরু করবে।

উপরে বর্ণিত পদ্ধতি অনুযায়ী লিঙ্কটি পাওয়ার পর, যাচাই করে নিন যে এটি ইমেল লিঙ্কের মাধ্যমে সত্যতা যাচাইয়ের জন্যই দেওয়া হয়েছে এবং সাইন ইন প্রক্রিয়াটি সম্পন্ন করুন।

Kotlin

val auth = Firebase.auth
val intent = intent
val emailLink = intent.data.toString()

// Confirm the link is a sign-in with email link.
if (auth.isSignInWithEmailLink(emailLink)) {
    // Retrieve this from wherever you stored it
    val email = "someemail@domain.com"

    // The client SDK will parse the code from the link for you.
    auth.signInWithEmailLink(email, emailLink)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "Successfully signed in with email link!")
                val result = task.result
                // You can access the new user via result.getUser()
                // Additional user info profile *not* available via:
                // result.getAdditionalUserInfo().getProfile() == null
                // You can check if the user is new or existing:
                // result.getAdditionalUserInfo().isNewUser()
            } else {
                Log.e(TAG, "Error signing in with email link", task.exception)
            }
        }
}

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
Intent intent = getIntent();
String emailLink = intent.getData().toString();

// Confirm the link is a sign-in with email link.
if (auth.isSignInWithEmailLink(emailLink)) {
    // Retrieve this from wherever you stored it
    String email = "someemail@domain.com";

    // The client SDK will parse the code from the link for you.
    auth.signInWithEmailLink(email, emailLink)
            .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "Successfully signed in with email link!");
                        AuthResult result = task.getResult();
                        // You can access the new user via result.getUser()
                        // Additional user info profile *not* available via:
                        // result.getAdditionalUserInfo().getProfile() == null
                        // You can check if the user is new or existing:
                        // result.getAdditionalUserInfo().isNewUser()
                    } else {
                        Log.e(TAG, "Error signing in with email link", task.getException());
                    }
                }
            });
}

একটি অ্যাপল অ্যাপ্লিকেশনে ইমেল লিঙ্কের মাধ্যমে সাইন-ইন কীভাবে পরিচালনা করতে হয় সে সম্পর্কে আরও জানতে, অ্যাপল প্ল্যাটফর্ম গাইডটি দেখুন।

একটি ওয়েব অ্যাপ্লিকেশনে ইমেল লিঙ্কের মাধ্যমে সাইন-ইন কীভাবে পরিচালনা করতে হয়, তা জানতে ওয়েব গাইডটি দেখুন।

আপনি এই প্রমাণীকরণ পদ্ধতিটি কোনো বিদ্যমান ব্যবহারকারীর সাথেও লিঙ্ক করতে পারেন। উদাহরণস্বরূপ, যে ব্যবহারকারী পূর্বে অন্য কোনো প্রদানকারী, যেমন একটি ফোন নম্বর, ব্যবহার করে প্রমাণীকৃত হয়েছেন, তিনি তার বিদ্যমান অ্যাকাউন্টে এই সাইন-ইন পদ্ধতিটি যোগ করতে পারেন।

পার্থক্যটা হবে অপারেশনটির দ্বিতীয়ার্ধে:

Kotlin

// Construct the email link credential from the current URL.
val credential = EmailAuthProvider.getCredentialWithLink(email, emailLink)

// Link the credential to the current user.
Firebase.auth.currentUser!!.linkWithCredential(credential)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Successfully linked emailLink credential!")
            val result = task.result
            // You can access the new user via result.getUser()
            // Additional user info profile *not* available via:
            // result.getAdditionalUserInfo().getProfile() == null
            // You can check if the user is new or existing:
            // result.getAdditionalUserInfo().isNewUser()
        } else {
            Log.e(TAG, "Error linking emailLink credential", task.exception)
        }
    }

Java

// Construct the email link credential from the current URL.
AuthCredential credential =
        EmailAuthProvider.getCredentialWithLink(email, emailLink);

// Link the credential to the current user.
auth.getCurrentUser().linkWithCredential(credential)
        .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Successfully linked emailLink credential!");
                    AuthResult result = task.getResult();
                    // You can access the new user via result.getUser()
                    // Additional user info profile *not* available via:
                    // result.getAdditionalUserInfo().getProfile() == null
                    // You can check if the user is new or existing:
                    // result.getAdditionalUserInfo().isNewUser()
                } else {
                    Log.e(TAG, "Error linking emailLink credential", task.getException());
                }
            }
        });

কোনো সংবেদনশীল কার্যক্রম চালানোর আগে ইমেল লিঙ্কের ব্যবহারকারীকে পুনরায় প্রমাণীকরণের জন্যও এটি ব্যবহার করা যেতে পারে।

Kotlin

// Construct the email link credential from the current URL.
val credential = EmailAuthProvider.getCredentialWithLink(email, emailLink)

// Re-authenticate the user with this credential.
Firebase.auth.currentUser!!.reauthenticateAndRetrieveData(credential)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            // User is now successfully reauthenticated
        } else {
            Log.e(TAG, "Error reauthenticating", task.exception)
        }
    }

Java

// Construct the email link credential from the current URL.
AuthCredential credential =
        EmailAuthProvider.getCredentialWithLink(email, emailLink);

// Re-authenticate the user with this credential.
auth.getCurrentUser().reauthenticateAndRetrieveData(credential)
        .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // User is now successfully reauthenticated
                } else {
                    Log.e(TAG, "Error reauthenticating", task.getException());
                }
            }
        });

তবে, যেহেতু প্রক্রিয়াটি এমন কোনো ভিন্ন ডিভাইসে শেষ হতে পারে যেখানে মূল ব্যবহারকারী লগ ইন করা ছিলেন না, তাই এই প্রক্রিয়াটি সম্পূর্ণ নাও হতে পারে। সেক্ষেত্রে, ব্যবহারকারীকে একই ডিভাইসে লিঙ্কটি খুলতে বাধ্য করার জন্য একটি ত্রুটি দেখানো যেতে পারে। অপারেশনের ধরন এবং ব্যবহারকারীর ইউআইডি (uid) সম্পর্কে তথ্য প্রদানের জন্য লিঙ্কে কিছু স্টেট (state) পাঠানো যেতে পারে।

ইমেল লিঙ্কের প্রমাণীকরণ পূর্বে Firebase Dynamic Links উপর নির্ভর করত, যা ২৫শে আগস্ট, ২০২৫-এ বন্ধ করে দেওয়া হবে।

আমরা Firebase Authentication Android SDK v23.2.0+ এবং Firebase BoM v33.9.0+-এ একটি বিকল্প সমাধান প্রকাশ করেছি।

আপনার অ্যাপ যদি পুরোনো ধরনের লিঙ্ক ব্যবহার করে থাকে, তবে আপনার অ্যাপটিকে নতুন Firebase Hosting ভিত্তিক সিস্টেমে স্থানান্তর করা উচিত।

যদি আপনি আপনার প্রজেক্টটি ১৫ই সেপ্টেম্বর, ২০২৩ বা তার পরে তৈরি করে থাকেন, তাহলে ইমেইল এনুমারেশন প্রোটেকশন ডিফল্টরূপে সক্রিয় থাকে। এই ফিচারটি আপনার প্রজেক্টের ইউজার অ্যাকাউন্টগুলোর নিরাপত্তা উন্নত করে, কিন্তু এটি fetchSignInMethodsForEmail() মেথডটিকে নিষ্ক্রিয় করে দেয়, যা আমরা পূর্বে আইডেন্টিফায়ার-ফার্স্ট ফ্লো বাস্তবায়নের জন্য সুপারিশ করেছিলাম।

যদিও আপনি আপনার প্রোজেক্টের জন্য ইমেল গণনা সুরক্ষা নিষ্ক্রিয় করতে পারেন, আমরা তা না করার পরামর্শ দিই।

আরও বিস্তারিত তথ্যের জন্য ইমেল গণনা সুরক্ষা সংক্রান্ত ডকুমেন্টেশন দেখুন।

পরবর্তী পদক্ষেপ

কোনো ব্যবহারকারী প্রথমবার সাইন ইন করার পর, একটি নতুন ব্যবহারকারী অ্যাকাউন্ট তৈরি হয় এবং সেটি ব্যবহারকারীর সাইন ইন করার ক্রেডেনশিয়াল—অর্থাৎ, ইউজার নেম ও পাসওয়ার্ড, ফোন নম্বর, বা অথোরাইজেশন প্রোভাইডারের তথ্যের—সাথে লিঙ্ক করা হয়। এই নতুন অ্যাকাউন্টটি আপনার ফায়ারবেস প্রজেক্টের অংশ হিসেবে সংরক্ষিত থাকে এবং ব্যবহারকারী কীভাবে সাইন ইন করছেন তা নির্বিশেষে, আপনার প্রজেক্টের প্রতিটি অ্যাপে তাকে শনাক্ত করতে এটি ব্যবহার করা যেতে পারে।

  • আপনার অ্যাপগুলিতে, আপনি FirebaseUser অবজেক্ট থেকে ব্যবহারকারীর প্রাথমিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারী ব্যবস্থাপনা (Manage Users) দেখুন।

  • আপনার Firebase Realtime Database and Cloud Storage Security Rules- এ, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ইউজার আইডি পেতে পারেন এবং একজন ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবে তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।

বিদ্যমান কোনো ব্যবহারকারী অ্যাকাউন্টের সাথে অথেন্টিকেশন প্রোভাইডারের ক্রেডেনশিয়াল লিঙ্ক করার মাধ্যমে আপনি ব্যবহারকারীদের একাধিক অথেন্টিকেশন প্রোভাইডার ব্যবহার করে আপনার অ্যাপে সাইন ইন করার অনুমতি দিতে পারেন।

কোনো ব্যবহারকারীকে সাইন আউট করতে, signOut কল করুন:

Kotlin

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();