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

আপনি Firebase প্রমাণীকরণ ব্যবহার করে একটি ব্যবহারকারীকে একটি লিঙ্ক সহ একটি ইমেল পাঠিয়ে সাইন ইন করতে পারেন, যেটিতে ক্লিক করে তারা সাইন ইন করতে পারে৷ প্রক্রিয়ায়, ব্যবহারকারীর ইমেল ঠিকানাও যাচাই করা হয়৷

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

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

তুমি শুরু করার আগে

আপনার Android প্রকল্প সেট আপ করুন

  1. যদি আপনি ইতিমধ্যেই না করে থাকেন তাহলে আপনার Android প্রকল্পে Firebase যোগ করুন

  2. Firebase Android BoM ব্যবহার করে, আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত app/build.gradle ) ফায়ারবেস প্রমাণীকরণ অ্যান্ড্রয়েড লাইব্রেরির জন্য নির্ভরতা ঘোষণা করুন।

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

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.3.1')
    
        // Declare 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 declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

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

    (বিকল্প) BoM ব্যবহার না করে Firebase লাইব্রেরি নির্ভরতা ঘোষণা করুন

    আপনি যদি Firebase BoM ব্যবহার না করা বেছে নেন, তাহলে আপনাকে অবশ্যই প্রতিটি Firebase লাইব্রেরি সংস্করণ তার নির্ভরতা লাইনে উল্লেখ করতে হবে।

    মনে রাখবেন যে আপনি যদি আপনার অ্যাপে একাধিক Firebase লাইব্রেরি ব্যবহার করেন, তাহলে আমরা লাইব্রেরি সংস্করণগুলি পরিচালনা করতে BoM ব্যবহার করার সুপারিশ করি, যা নিশ্চিত করে যে সমস্ত সংস্করণ সামঞ্জস্যপূর্ণ।

    dependencies {
        // Declare 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:21.0.7'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.3.1')
    
        // Declare 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-ktx'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

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

    (বিকল্প) BoM ব্যবহার না করে Firebase লাইব্রেরি নির্ভরতা ঘোষণা করুন

    আপনি যদি Firebase BoM ব্যবহার না করা বেছে নেন, তাহলে আপনাকে অবশ্যই প্রতিটি Firebase লাইব্রেরি সংস্করণ তার নির্ভরতা লাইনে উল্লেখ করতে হবে।

    মনে রাখবেন যে আপনি যদি আপনার অ্যাপে একাধিক Firebase লাইব্রেরি ব্যবহার করেন, তাহলে আমরা লাইব্রেরি সংস্করণগুলি পরিচালনা করতে BoM ব্যবহার করার সুপারিশ করি, যা নিশ্চিত করে যে সমস্ত সংস্করণ সামঞ্জস্যপূর্ণ।

    dependencies {
        // Declare 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-ktx:21.0.7'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

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

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

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

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

    • url : এম্বেড করার গভীর লিঙ্ক এবং যেকোন অতিরিক্ত অবস্থা পাস করতে হবে। লিঙ্কের ডোমেনটিকে অনুমোদিত ডোমেনের Firebase কনসোলের তালিকায় সাদা তালিকাভুক্ত করতে হবে, যা সাইন-ইন পদ্ধতি ট্যাবে গিয়ে (প্রমাণিকরণ -> সাইন-ইন পদ্ধতি) পাওয়া যাবে। লিঙ্কটি ব্যবহারকারীকে এই URL-এ পুনঃনির্দেশ করবে যদি অ্যাপটি তাদের ডিভাইসে ইনস্টল করা না থাকে এবং অ্যাপটি ইনস্টল করা সম্ভব না হয়।
    • androidPackageName এবং IOSBundleId : যখন কোনো Android বা Apple ডিভাইসে সাইন-ইন লিঙ্ক খোলা হয় তখন ব্যবহার করা অ্যাপ। মোবাইল অ্যাপের মাধ্যমে ইমেল অ্যাকশন লিঙ্কগুলি খুলতে Firebase ডায়নামিক লিঙ্কগুলি কীভাবে কনফিগার করবেন সে সম্পর্কে আরও জানুন।
    • handleCodeInApp : সত্যে সেট করুন। সাইন-ইন অপারেশনটি সর্বদা অ্যাপে সম্পূর্ণ করতে হবে অন্যান্য ব্যান্ড ইমেল অ্যাকশনের বিপরীতে (পাসওয়ার্ড রিসেট এবং ইমেল যাচাইকরণ)। এর কারণ হল, প্রবাহের শেষে, ব্যবহারকারী সাইন ইন করবেন বলে আশা করা হচ্ছে এবং অ্যাপের মধ্যে তাদের প্রমাণীকরণ স্থিতি বজায় থাকবে।
    • dynamicLinkDomain : যখন একটি প্রকল্পের জন্য একাধিক কাস্টম ডায়নামিক লিঙ্ক ডোমেন সংজ্ঞায়িত করা হয়, নির্দিষ্ট মোবাইল অ্যাপের মাধ্যমে লিঙ্কটি খোলার সময় কোনটি ব্যবহার করতে হবে তা উল্লেখ করুন (উদাহরণস্বরূপ, example.page.link )। অন্যথায় প্রথম ডোমেইন স্বয়ংক্রিয়ভাবে নির্বাচিত হয়।

    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();

    Kotlin+KTX

    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 */)
    }

    ActionCodeSettings সম্পর্কে আরো জানতে, Email Actions বিভাগে পাসিং স্টেট পড়ুন।

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

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

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

    Kotlin+KTX

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

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

একটি অনিচ্ছাকৃত ব্যবহারকারী হিসাবে বা একটি অনিচ্ছাকৃত ডিভাইসে সাইন ইন করার জন্য একটি সাইন-ইন লিঙ্ক ব্যবহার করা থেকে প্রতিরোধ করার জন্য, Firebase Auth-এর জন্য সাইন-ইন প্রবাহ সম্পূর্ণ করার সময় ব্যবহারকারীর ইমেল ঠিকানা প্রদান করা প্রয়োজন৷ সাইন-ইন সফল হওয়ার জন্য, এই ইমেল ঠিকানাটি অবশ্যই যে ঠিকানায় সাইন-ইন লিঙ্কটি পাঠানো হয়েছিল তার সাথে মেলে।

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

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

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

একটি Android অ্যাপে সাইন-ইন সম্পূর্ণ করা হচ্ছে

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

Firebase Auth ফায়ারবেস ডায়নামিক লিঙ্কগুলি ব্যবহার করে একটি লিঙ্ক পাঠানোর সময় যা একটি মোবাইল অ্যাপ্লিকেশনে খোলার জন্য। এই বৈশিষ্ট্যটি ব্যবহার করার জন্য, ডায়নামিক লিঙ্কগুলিকে Firebase কনসোলে কনফিগার করতে হবে৷

  1. ফায়ারবেস ডায়নামিক লিঙ্কগুলি সক্ষম করুন:

    1. Firebase কনসোলে , ডায়নামিক লিঙ্ক বিভাগ খুলুন।
    2. আপনি যদি এখনও ডায়নামিক লিঙ্কের শর্তাদি গ্রহণ না করে থাকেন এবং একটি ডায়নামিক লিঙ্ক ডোমেন তৈরি না করে থাকেন, তাহলে এখনই করুন৷

      আপনি যদি ইতিমধ্যেই একটি ডায়নামিক লিঙ্ক ডোমেন তৈরি করে থাকেন, তবে এটি নোট করুন। একটি ডায়নামিক লিঙ্ক ডোমেন সাধারণত নিম্নলিখিত উদাহরণের মত দেখায়:

      example.page.link

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

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

    1. আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশন থেকে এই লিঙ্কগুলি পরিচালনা করার জন্য, Firebase কনসোল প্রকল্প সেটিংসে Android প্যাকেজের নাম নির্দিষ্ট করতে হবে৷ এছাড়াও, আবেদনের শংসাপত্রের SHA-1 এবং SHA-256 প্রদান করতে হবে।
    2. এখন আপনি একটি ডায়নামিক লিঙ্ক ডোমেন যোগ করেছেন এবং নিশ্চিত করেছেন যে আপনার অ্যান্ড্রয়েড অ্যাপটি সঠিকভাবে কনফিগার করা হয়েছে, ডায়নামিক লিঙ্কটি লঞ্চার কার্যকলাপ থেকে শুরু করে আপনার অ্যাপ্লিকেশনে পুনঃনির্দেশিত হবে।
    3. আপনি যদি ডায়নামিক লিঙ্কটি একটি নির্দিষ্ট কার্যকলাপে পুনঃনির্দেশ করতে চান তবে আপনাকে আপনার AndroidManifest.xml ফাইলে একটি অভিপ্রায় ফিল্টার কনফিগার করতে হবে। এটি আপনার ডায়নামিক লিঙ্ক ডোমেন বা অভিপ্রায় ফিল্টারে ইমেল অ্যাকশন হ্যান্ডলার নির্দিষ্ট করে করা যেতে পারে। ডিফল্টরূপে, ইমেল অ্যাকশন হ্যান্ডলার নিম্নলিখিত উদাহরণের মতো একটি ডোমেনে হোস্ট করা হয়:
      PROJECT_ID.firebaseapp.com/
    4. সতর্কতা:
      1. আপনার অভিপ্রায় ফিল্টারে actionCodeSettings-এ আপনি যে URL সেট করেছেন তা নির্দিষ্ট করবেন না।
      2. আপনার ডায়নামিক লিঙ্ক ডোমেন তৈরি করার সময় আপনি একটি ছোট URL লিঙ্কও তৈরি করতে পারেন। এই সংক্ষিপ্ত URL পাস করা হবে না; একটি android:pathPrefix অ্যাট্রিবিউট দিয়ে এটি ধরার জন্য আপনার অভিপ্রায় ফিল্টারটি কনফিগার করবেন না । এর মানে হল যে আপনি আপনার অ্যাপ্লিকেশনের বিভিন্ন অংশে বিভিন্ন গতিশীল লিঙ্ক ধরতে সক্ষম হবেন না। যাইহোক, আপনি কী অপারেশন করার চেষ্টা করছেন তা দেখতে লিঙ্কে mode ক্যোয়ারী প্যারামিটার চেক করতে পারেন , অথবা আপনার অ্যাপ প্রাপ্ত লিঙ্কটি আপনি যা চান তা করে কিনা তা দেখতে SDK পদ্ধতি যেমন isSignInWithEmailLink ব্যবহার করুন৷
    5. ডায়নামিক লিঙ্ক প্রাপ্তির বিষয়ে আরও জানতে, অ্যান্ড্রয়েড ডায়নামিক লিঙ্ক প্রাপ্তির নির্দেশাবলী পড়ুন।

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

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+KTX

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)
                }
            }
}

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

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

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

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

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+KTX

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

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

Kotlin+KTX

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

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

আপনি যদি ইমেলের মাধ্যমে পাসওয়ার্ড এবং লিঙ্ক-ভিত্তিক সাইন ইন উভয়ই সমর্থন করেন, পাসওয়ার্ড/লিঙ্ক ব্যবহারকারীর জন্য সাইন ইন করার পদ্ধতিকে আলাদা করতে, fetchSignInMethodsForEmail ব্যবহার করুন। এটি শনাক্তকারী-প্রথম প্রবাহের জন্য দরকারী যেখানে ব্যবহারকারীকে প্রথমে তাদের ইমেল প্রদান করতে বলা হয় এবং তারপর সাইন-ইন করার পদ্ধতির সাথে উপস্থাপন করা হয়:

Java

auth.fetchSignInMethodsForEmail(email)
        .addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
            @Override
            public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
                if (task.isSuccessful()) {
                    SignInMethodQueryResult result = task.getResult();
                    List<String> signInMethods = result.getSignInMethods();
                    if (signInMethods.contains(EmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD)) {
                        // User can sign in with email/password
                    } else if (signInMethods.contains(EmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD)) {
                        // User can sign in with email/link
                    }
                } else {
                    Log.e(TAG, "Error getting sign in methods for user", task.getException());
                }
            }
        });

Kotlin+KTX

Firebase.auth.fetchSignInMethodsForEmail(email)
        .addOnSuccessListener { result ->
            val signInMethods = result.signInMethods!!
            if (signInMethods.contains(EmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD)) {
                // User can sign in with email/password
            } else if (signInMethods.contains(EmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD)) {
                // User can sign in with email/link
            }
        }
        .addOnFailureListener { exception ->
            Log.e(TAG, "Error getting sign in methods for user", exception)
        }

উপরে বর্ণিত ইমেল/পাসওয়ার্ড এবং ইমেল/লিঙ্ককে সাইন-ইন করার বিভিন্ন পদ্ধতি সহ একই EmailAuthProvider (একই PROVIDER_ID ) হিসাবে বিবেচনা করা হয়৷

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

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

  • আপনার অ্যাপে, আপনি FirebaseUser অবজেক্ট থেকে ব্যবহারকারীর মৌলিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারীদের পরিচালনা দেখুন।

  • আপনার ফায়ারবেস রিয়েলটাইম ডেটাবেস এবং ক্লাউড স্টোরেজ সুরক্ষা নিয়মে , আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ব্যবহারকারী আইডি পেতে পারেন এবং ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারে তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।

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

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

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()