पुष्टि करने की स्थिति परसिस्टेंस

आप यह तय कर सकते हैं कि Firebase JS SDK टूल का इस्तेमाल करते समय, पुष्टि करने की स्थिति कैसी बनी रहती है. इसमें यह तय करना शामिल है कि साइन इन किए हुए उपयोगकर्ता को तब तक जारी रखना है या नहीं जब तक कि साफ़ तौर पर साइन आउट न किया जाए. साथ ही, विंडो बंद होने पर या पेज के फिर से लोड होने पर साफ़ हो जाए.

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

हालांकि, कुछ मामलों में ऐसा हो सकता है कि यह तरीका सही न हो:

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

जैसा कि ऊपर बताया गया है, ऐसी कई स्थितियां हैं जिनमें डिफ़ॉल्ट स्थायी परसिस्टेंस को बदलना पड़ सकता है.

पुष्टि की प्रोसेस के दौरान ऐसा किया जा सकता है

अपने ऐप्लिकेशन या उपयोगकर्ता की ज़रूरतों के हिसाब से, दिए गए Firebase ऑथराइज़ेशन इंस्टेंस पर पुष्टि की स्थिति के तीन टाइप में से किसी एक को चुना जा सकता है.

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

पुष्टि की स्थिति में बदलाव करना

firebase.auth().setPersistence तरीके को कॉल करके, मौजूदा टाइप के परसिस्टेंस के बारे में बताया जा सकता है या उसमें बदलाव किया जा सकता है:

Web

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

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 इंस्टेंस पर परसिस्टेंस का टाइप बदल जाएगा. साथ ही, आने वाले समय में साइन-इन करने के अनुरोधों के लिए भी इस टाइप का परसिस्टेंस लागू होगा. इसमें रीडायरेक्ट के अनुरोधों के साथ साइन-इन करना भी शामिल है. इससे एक प्रॉमिस मिलेगा. यह प्रॉमिस तब रिज़ॉल्व होगा, जब राज्य एक तरह के स्टोरेज से दूसरे टाइप में कॉपी कर लेगा. परसिस्टेंटेंस बदलने के बाद साइन इन करने के तरीके को कॉल करने से, उस परसिस्टेंस के बदलाव के पूरा होने के बाद ही उसे नई ऑथराइज़ेशन स्थिति पर लागू किया जाएगा.

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

परसिस्टेंस व्यवहार की खास जानकारी

स्थिरता की मौजूदा स्थिति तय करते समय, ये शर्तें लागू होंगी.

  • शुरुआत में, SDK टूल यह जांच करेगा कि पुष्टि किया गया उपयोगकर्ता मौजूद है या नहीं. जब तक setPersistence को कॉल नहीं किया जाता, तब तक उस उपयोगकर्ता का मौजूदा पर्सेंटेंस टाइप, आने वाले समय में साइन इन करने की कोशिशों के लिए लागू रहेगा. इसलिए, अगर उस उपयोगकर्ता को पिछले वेब पेज पर session में बनाए रखा गया है और किसी नए पेज पर विज़िट किया गया है, तो किसी दूसरे उपयोगकर्ता के साथ फिर से साइन इन करने से, उस उपयोगकर्ता की स्थिति भी session परसिस्टेंस के साथ सेव हो जाएगी.
  • अगर किसी उपयोगकर्ता ने साइन इन नहीं किया है और कोई शर्त तय नहीं की है, तो डिफ़ॉल्ट सेटिंग लागू होगी (ब्राउज़र ऐप्लिकेशन में local).
  • अगर किसी उपयोगकर्ता ने साइन इन नहीं किया है और नए तरह का परसिस्टेंस सेट किया जाता है, तो आने वाले समय में साइन इन करने की कोशिश में उस तरह के परसिस्टेंस का इस्तेमाल किया जाएगा.
  • अगर उपयोगकर्ता ने साइन इन किया हुआ है और परसिस्टेंस टाइप में बदलाव किया गया है, तो साइन इन किए हुए मौजूदा उपयोगकर्ता का परसिस्टेंस बदल जाएगा. आने वाले समय में साइन इन करने के लिए, इस नए तरीके का इस्तेमाल किया जाएगा.
  • जब साइन इन विथ रीडायरेक्ट को कॉल किया जाता है, तब परसिस्टेंटेंस का मौजूदा टाइप बनाए रखा जाता है और साइन इन किए हुए नए उपयोगकर्ता के लिए OAuth फ़्लो के आखिर में लागू किया जाता है, भले ही परसिस्टेंस none रहा हो. अगर उस पेज पर साफ़ तौर पर परसिस्टेंस की जानकारी दी गई है, तो वह रीडायरेक्ट फ़्लो शुरू करने वाले पिछले पेज की, पुष्टि की स्थिति को बनाए रखने वाली प्रोसेस को बदल देगा.

    Web

    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

    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 पर बने रहेगा. वहीं, बाकी सभी टैब पर भी उपयोगकर्ता को साइन आउट कर दिया जाएगा.