प्रमाणीकरण स्थिति दृढ़ता

आप निर्दिष्ट कर सकते हैं कि फायरबेस जेएस एसडीके का उपयोग करते समय प्रमाणीकरण स्थिति कैसे बनी रहती है। इसमें यह निर्दिष्ट करने की क्षमता शामिल है कि साइन इन किए गए उपयोगकर्ता को स्पष्ट साइन आउट होने तक अनिश्चित काल तक जारी रखा जाना चाहिए, विंडो बंद होने पर साफ़ किया जाना चाहिए या पृष्ठ पुनः लोड होने पर साफ़ किया जाना चाहिए।

एक वेब एप्लिकेशन के लिए, डिफ़ॉल्ट व्यवहार उपयोगकर्ता द्वारा ब्राउज़र बंद करने के बाद भी उपयोगकर्ता के सत्र को जारी रखना है। यह सुविधाजनक है क्योंकि उपयोगकर्ता को हर बार एक ही डिवाइस पर वेब पेज पर जाने पर लगातार साइन-इन करने की आवश्यकता नहीं होती है। इसके लिए उपयोगकर्ता को अपना पासवर्ड दोबारा दर्ज करना होगा, एसएमएस सत्यापन भेजना होगा, आदि, जिससे उपयोगकर्ता अनुभव में काफी परेशानी हो सकती है।

हालाँकि, ऐसे मामले हैं जहां यह व्यवहार आदर्श नहीं हो सकता है:

  • संवेदनशील डेटा वाले एप्लिकेशन विंडो या टैब बंद होने पर स्थिति साफ़ करना चाह सकते हैं। यदि उपयोगकर्ता साइन आउट करना भूल जाता है तो यह महत्वपूर्ण है।
  • ऐसे एप्लिकेशन जो एकाधिक उपयोगकर्ताओं द्वारा साझा किए गए डिवाइस पर उपयोग किए जाते हैं। यहां एक सामान्य उदाहरण लाइब्रेरी कंप्यूटर में चलने वाला एक ऐप है।
  • एक साझा डिवाइस पर एक एप्लिकेशन जिसे कई उपयोगकर्ताओं द्वारा एक्सेस किया जा सकता है। डेवलपर यह बताने में असमर्थ है कि उस एप्लिकेशन तक कैसे पहुंचा जा सकता है और वह उपयोगकर्ता को यह चुनने की क्षमता प्रदान करना चाहता है कि उसे अपना सत्र जारी रखना है या नहीं। यह साइन-इन के दौरान "मुझे याद रखें" विकल्प जोड़कर किया जा सकता है।
  • कुछ स्थितियों में, कोई डेवलपर किसी अज्ञात उपयोगकर्ता को तब तक जारी नहीं रखना चाहता जब तक वह उपयोगकर्ता एक गैर-अनाम खाते (फ़ेडरेटेड, पासवर्ड, फ़ोन, आदि) में अपग्रेड न हो जाए।
  • एक डेवलपर अलग-अलग उपयोगकर्ताओं को अलग-अलग टैब पर किसी एप्लिकेशन में साइन इन करने की अनुमति देना चाह सकता है। डिफ़ॉल्ट व्यवहार एक ही मूल के लिए सभी टैब में स्थिति को बनाए रखना है।

जैसा कि ऊपर कहा गया है, ऐसी कई स्थितियाँ हैं जहाँ डिफ़ॉल्ट स्थायी दृढ़ता को ओवरराइड करने की आवश्यकता हो सकती है।

प्रामाणिक स्थिति दृढ़ता के समर्थित प्रकार

आप अपने एप्लिकेशन या उपयोगकर्ता की आवश्यकताओं के आधार पर निर्दिष्ट फायरबेस प्रामाणिक उदाहरण पर तीन प्रकार की प्रामाणिक स्थिति दृढ़ता में से एक चुन सकते हैं।

Enum कीमत विवरण
firebase.auth.Auth.Persistence.LOCAL 'स्थानीय' इंगित करता है कि ब्राउज़र विंडो बंद होने या रिएक्ट नेटिव में गतिविधि नष्ट होने पर भी स्थिति बनी रहेगी। उस स्थिति को साफ़ करने के लिए एक स्पष्ट साइन आउट की आवश्यकता है। ध्यान दें कि फायरबेस ऑथ वेब सत्र एकल होस्ट मूल हैं और केवल एक ही डोमेन के लिए जारी रहेंगे।
firebase.auth.Auth.Persistence.SESSION 'सत्र' इंगित करता है कि स्थिति केवल वर्तमान सत्र या टैब में बनी रहेगी, और जब टैब या विंडो जिसमें उपयोगकर्ता प्रमाणित है, बंद हो जाएगा तो साफ़ हो जाएगा। केवल वेब ऐप्स पर लागू होता है।
firebase.auth.Auth.Persistence.NONE 'कोई नहीं' इंगित करता है कि स्थिति केवल मेमोरी में संग्रहीत की जाएगी और विंडो या गतिविधि ताज़ा होने पर साफ़ हो जाएगी।

प्रामाणिक स्थिति दृढ़ता को संशोधित करना

आप 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;
  });

यह वर्तमान में सहेजे गए प्रामाणिक सत्र के लिए निर्दिष्ट प्रामाणिक उदाहरण पर दृढ़ता के प्रकार को बदल देगा और रीडायरेक्ट अनुरोधों के साथ साइन-इन सहित भविष्य के साइन-इन अनुरोधों के लिए इस प्रकार की दृढ़ता को लागू करेगा। यह एक वादा लौटाएगा जो राज्य द्वारा एक प्रकार के भंडारण से दूसरे में प्रतिलिपि बनाने के बाद हल हो जाएगा। दृढ़ता बदलने के बाद साइन-इन विधि को कॉल करने से नई प्रामाणिक स्थिति पर इसे लागू करने से पहले उस दृढ़ता परिवर्तन के पूरा होने की प्रतीक्षा की जाएगी।

वेब ब्राउज़र और रिएक्ट नेटिव ऐप्स के लिए डिफ़ॉल्ट local है (बशर्ते ब्राउज़र इस स्टोरेज तंत्र का समर्थन करता है, उदाहरण के लिए तृतीय पक्ष कुकीज़/डेटा सक्षम है) जबकि यह Node.js बैकएंड ऐप्स के लिए none है।

दृढ़ता व्यवहार का अवलोकन

दृढ़ता की वर्तमान स्थिति का निर्धारण करते समय निम्नलिखित मानदंड लागू किए जाएंगे।

  • प्रारंभ में, एसडीके जाँच करेगा कि कोई प्रमाणित उपयोगकर्ता मौजूद है या नहीं। जब तक 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 और local प्रकार के भंडारण में सहेजी गई प्रामाणिक स्थिति):

  • उपयोगकर्ता एकाधिक टैब पर विभिन्न उपयोगकर्ताओं के साथ session या none दृढ़ता का उपयोग करके साइन इन कर सकते हैं। प्रत्येक टैब दूसरे टैब की स्थिति नहीं देख सकता.
  • local दृढ़ता का उपयोग करके साइन इन करने के किसी भी प्रयास का पता लगाया जाएगा और सभी टैब पर सिंक्रनाइज़ किया जाएगा। यदि उपयोगकर्ता पहले session या none दृढ़ता का उपयोग करके किसी विशिष्ट टैब पर साइन इन नहीं किया गया था, तो वह स्थिति साफ़ कर दी जाएगी।
  • यदि उपयोगकर्ता पहले कई टैब खोले हुए local दृढ़ता का उपयोग करके साइन इन किया गया था और फिर एक टैब में none या session दृढ़ता पर स्विच करता है, तो उस टैब की स्थिति को उपयोगकर्ता द्वारा session या none और अन्य सभी टैब पर संशोधित किया जाएगा। साइन आउट हो जाएगा.