প্রমাণীকরণ রাষ্ট্র অধ্যবসায়

Firebase JS SDK ব্যবহার করার সময় প্রমাণীকরণের অবস্থা কীভাবে বজায় থাকে তা আপনি উল্লেখ করতে পারেন। এতে স্পষ্টভাবে সাইন আউট না হওয়া পর্যন্ত একটি সাইন ইন করা ব্যবহারকারীকে অনির্দিষ্টকালের জন্য বজায় রাখা উচিত কিনা, উইন্ডোটি বন্ধ হয়ে গেলে বা পৃষ্ঠা পুনরায় লোড করার সময় সাফ করা হলে তা নির্দিষ্ট করার ক্ষমতা অন্তর্ভুক্ত৷

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

যাইহোক, এমন কিছু ক্ষেত্রে রয়েছে যেখানে এই আচরণটি আদর্শ নাও হতে পারে:

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

উপরে উল্লিখিত হিসাবে, এমন একাধিক পরিস্থিতি রয়েছে যেখানে ডিফল্ট স্থায়ী স্থায়ীত্বকে ওভাররাইড করা প্রয়োজন হতে পারে।

সমর্থিত প্রকারের Auth স্টেট স্থিরতা

আপনি আপনার আবেদন বা ব্যবহারকারীর প্রয়োজনীয়তার উপর ভিত্তি করে একটি নির্দিষ্ট Firebase Auth উদাহরণে তিন ধরনের Auth স্টেট স্থিরতা বেছে নিতে পারেন।

এনাম মান বর্ণনা
firebase.auth.Auth.Persistence.LOCAL 'স্থানীয়' ইঙ্গিত করে যে ব্রাউজার উইন্ডোটি বন্ধ হয়ে গেলেও বা প্রতিক্রিয়া নেটিভ-এ কার্যকলাপটি ধ্বংস হয়ে গেলেও অবস্থা বজায় থাকবে। সেই অবস্থাটি পরিষ্কার করার জন্য একটি স্পষ্ট সাইন আউট প্রয়োজন৷ মনে রাখবেন Firebase Auth ওয়েব সেশনগুলি একক হোস্টের উৎস এবং শুধুমাত্র একটি একক ডোমেনের জন্য স্থায়ী হবে৷
firebase.auth.Auth.Persistence.SESSION 'সেশন' ইঙ্গিত করে যে স্থিতি শুধুমাত্র বর্তমান সেশন বা ট্যাবে টিকে থাকবে, এবং যখন ট্যাব বা উইন্ডোতে ব্যবহারকারীর প্রমাণীকরণ বন্ধ হয়ে যাবে তখন তা সাফ করা হবে। শুধুমাত্র ওয়েব অ্যাপে প্রযোজ্য।
firebase.auth.Auth.Persistence.NONE 'কেউ না' ইঙ্গিত করে যে অবস্থা শুধুমাত্র মেমরিতে সংরক্ষণ করা হবে এবং উইন্ডো বা কার্যকলাপ রিফ্রেশ হলে সাফ করা হবে।

Auth রাজ্যের অধ্যবসায় সংশোধন করা হচ্ছে

আপনি firebase.auth().setPersistence পদ্ধতিতে কল করে বিদ্যমান ধরনের অধ্যবসায় নির্দিষ্ট বা সংশোধন করতে পারেন:

Web modular API

import { getAuth, setPersistence, signInWithEmailAndPassword, browserSessionPersistence } from "firebase/auth";

const auth = getAuth();
setPersistence(auth, browserSessionPersistence)
  .then(() => {
    // Existing and future Auth states are now persisted in the current
    // session only. Closing the window would clear any existing state even
    // if a user forgets to sign out.
    // ...
    // New sign-in will be persisted with session persistence.
    return signInWithEmailAndPassword(auth, email, password);
  })
  .catch((error) => {
    // Handle Errors here.
    const errorCode = error.code;
    const errorMessage = error.message;
  });

Web namespaced API

firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)
  .then(() => {
    // Existing and future Auth states are now persisted in the current
    // session only. Closing the window would clear any existing state even
    // if a user forgets to sign out.
    // ...
    // New sign-in will be persisted with session persistence.
    return firebase.auth().signInWithEmailAndPassword(email, password);
  })
  .catch((error) => {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
  });

এটি বর্তমানে সংরক্ষিত প্রমাণীকরণ সেশনের জন্য নির্দিষ্ট প্রমাণীকরণের দৃষ্টান্তে অধ্যবসায়ের ধরণ পরিবর্তন করবে এবং পুনঃনির্দেশের অনুরোধ সহ সাইন-ইন সহ ভবিষ্যতের সাইন-ইন অনুরোধের জন্য এই ধরনের অধ্যবসায় প্রয়োগ করবে। এটি একটি প্রতিশ্রুতি ফিরিয়ে দেবে যা রাষ্ট্র এক ধরনের স্টোরেজ থেকে অন্যটিতে অনুলিপি করা শেষ করার পরে সমাধান করবে। অধ্যবসায় পরিবর্তন করার পরে একটি সাইন-ইন পদ্ধতি কল করা নতুন Auth রাজ্যে প্রয়োগ করার আগে সেই অধ্যবসায় পরিবর্তন সম্পূর্ণ হওয়ার জন্য অপেক্ষা করবে৷

ওয়েব ব্রাউজার এবং রিঅ্যাক্ট নেটিভ অ্যাপের জন্য ডিফল্ট local (যদি ব্রাউজারটি এই স্টোরেজ মেকানিজমকে সমর্থন করে, যেমন 3য় পক্ষের কুকি/ডেটা সক্ষম করা থাকে) যেখানে এটি Node.js ব্যাকএন্ড অ্যাপের জন্য none

অধ্যবসায় আচরণের ওভারভিউ

অধ্যবসায়ের বর্তমান অবস্থা নির্ধারণ করার সময় নিম্নলিখিত মানদণ্ড প্রয়োগ করা হবে।

  • প্রাথমিকভাবে, SDK একজন প্রমাণীকৃত ব্যবহারকারী আছে কিনা তা পরীক্ষা করবে। setPersistence বলা না হলে, সেই ব্যবহারকারীর বর্তমান অধ্যবসায়ের ধরন ভবিষ্যতে সাইন-ইন প্রচেষ্টার জন্য প্রয়োগ করা হবে। সুতরাং সেই ব্যবহারকারী যদি পূর্ববর্তী ওয়েব পৃষ্ঠায় session স্থির থাকে এবং একটি নতুন পৃষ্ঠা পরিদর্শন করা হয়, তবে অন্য ব্যবহারকারীর সাথে আবার সাইন ইন করার ফলে সেই ব্যবহারকারীর অবস্থাও session স্থিরতার সাথে সংরক্ষণ করা হবে।
  • যদি কোনো ব্যবহারকারী সাইন ইন না করে এবং কোনো অধ্যবসায় নির্দিষ্ট না থাকে, তাহলে ডিফল্ট সেটিং প্রয়োগ করা হবে (একটি ব্রাউজার অ্যাপে local )।
  • যদি কোনো ব্যবহারকারী সাইন ইন না করে থাকে এবং একটি নতুন ধরনের অধ্যবসায় সেট করা থাকে, তাহলে ভবিষ্যতে যে কোনো সাইন-ইন প্রচেষ্টা সেই ধরনের অধ্যবসায় ব্যবহার করবে।
  • যদি ব্যবহারকারী সাইন ইন করে থাকেন এবং অধ্যবসায়ের ধরন পরিবর্তন করা হয়, তাহলে সেই বিদ্যমান সাইন ইন করা ব্যবহারকারী নতুনটিতে অধ্যবসায় পরিবর্তন করবে। সমস্ত ভবিষ্যতে সাইন-ইন প্রচেষ্টা সেই নতুন অধ্যবসায় ব্যবহার করবে।
  • যখন signInWithRedirect কল করা হয়, তখন বর্তমান অধ্যবসায়ের ধরনটি ধরে রাখা হয় এবং OAuth প্রবাহের শেষে নতুন সাইন ইন করা ব্যবহারকারীর কাছে প্রয়োগ করা হয়, এমনকি যদি অধ্যবসায়টি none হয়। যদি সেই পৃষ্ঠায় অধ্যবসায়টি স্পষ্টভাবে নির্দিষ্ট করা থাকে, তাহলে এটি পুনঃনির্দেশ প্রবাহ শুরু করা আগের পৃষ্ঠা থেকে ধরে রাখা প্রমাণীকরণের অবস্থাকে ওভাররাইড করবে।

    Web modular API

    import { getAuth, setPersistence, signInWithRedirect, inMemoryPersistence, GoogleAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    setPersistence(auth, inMemoryPersistence)
      .then(() => {
        const provider = new GoogleAuthProvider();
        // In memory persistence will be applied to the signed in Google user
        // even though the persistence was set to 'none' and a page redirect
        // occurred.
        return signInWithRedirect(auth, provider);
      })
      .catch((error) => {
        // Handle Errors here.
        const errorCode = error.code;
        const errorMessage = error.message;
      });

    Web namespaced API

    firebase.auth().setPersistence(firebase.auth.Auth.Persistence.NONE)
      .then(() => {
        var provider = new firebase.auth.GoogleAuthProvider();
        // In memory persistence will be applied to the signed in Google user
        // even though the persistence was set to 'none' and a page redirect
        // occurred.
        return firebase.auth().signInWithRedirect(provider);
      })
      .catch((error) => {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
      });

ব্রাউজার ট্যাব জুড়ে প্রত্যাশিত আচরণ

নিম্নলিখিত প্রত্যাশিত আচরণটি প্রযোজ্য হবে যখন বিভিন্ন ট্যাবে বিভিন্ন অধ্যবসায়ের ধরন ব্যবহার করা হয়। প্রয়োজনীয়তা হল যে কোনও সময়ে, একই সময়ে একাধিক ধরনের সংরক্ষিত স্টেট থাকা উচিত নয় (যেমন session সংরক্ষিত auth স্টেট এবং local ধরনের স্টোরেজ):

  • ব্যবহারকারীরা একাধিক ট্যাবে বিভিন্ন ব্যবহারকারীর সাথে session বা none অধ্যবসায় ব্যবহার করে সাইন ইন করতে পারেন। প্রতিটি ট্যাব অন্য ট্যাবের অবস্থা দেখতে পারে না।
  • local অধ্যবসায় ব্যবহার করে সাইন ইন করার যেকোনো প্রচেষ্টা সনাক্ত করা হবে এবং সমস্ত ট্যাবে সিঙ্ক্রোনাইজ করা হবে। ব্যবহারকারী যদি পূর্বে একটি নির্দিষ্ট ট্যাবে session ব্যবহার করে সাইন ইন করে থাকেন বা none অধ্যবসায় না থাকে, তাহলে সেই অবস্থা সাফ হয়ে যাবে।
  • যদি ব্যবহারকারী পূর্বে একাধিক ট্যাব খোলার মাধ্যমে local অধ্যবসায় ব্যবহার করে সাইন ইন করে থাকে এবং তারপরে একটি ট্যাবে none বা session অধ্যবসায় পরিবর্তন করে, তাহলে সেই ট্যাবের অবস্থা পরিবর্তন করা হবে ব্যবহারকারীর session থাকা বা none এবং অন্যান্য সমস্ত ট্যাবে, ব্যবহারকারী সাইন আউট করা হবে।