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

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

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

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

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

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

पुष्टि की स्थिति को बनाए रखने के लिए इस्तेमाल किए जा सकने वाले टाइप

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

Enum मान ब्यौरा
firebase.auth.Auth.Persistence.LOCAL 'local' इससे पता चलता है कि ब्राउज़र विंडो के बंद होने या React Native में गतिविधि के बंद होने के बाद भी, स्थिति बनी रहेगी. उस स्थिति को हटाने के लिए, साफ़ तौर पर साइन आउट करना ज़रूरी है. ध्यान दें कि Firebase Auth वेब सेशन, एक होस्ट ऑरिजिन के होते हैं और सिर्फ़ एक डोमेन के लिए सेव किए जाते हैं.
firebase.auth.Auth.Persistence.SESSION 'session' इससे पता चलता है कि यह स्थिति सिर्फ़ मौजूदा सेशन या टैब में बनी रहेगी. साथ ही, जिस टैब या विंडो में उपयोगकर्ता ने पुष्टि की है वह बंद होने पर, यह स्थिति हट जाएगी. यह सिर्फ़ वेब ऐप्लिकेशन पर लागू होता है.
firebase.auth.Auth.Persistence.NONE '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 सेशन के लिए, चुने गए Auth इंस्टेंस पर पर्सिस्टेंस का टाइप बदल जाएगा. साथ ही, आने वाले समय में साइन इन करने के अनुरोधों के लिए, इस तरह की पर्सिस्टेंस लागू की जाएगी. इनमें, रीडायरेक्ट अनुरोधों के साथ साइन इन करना भी शामिल है. इससे एक प्रॉमिस मिलेगा. जब डेटा को एक तरह के स्टोरेज से दूसरे तरह के स्टोरेज में कॉपी करने की प्रोसेस पूरी हो जाएगी, तब इस प्रॉमिस को रिज़ॉल्व कर दिया जाएगा. पर्सिस्टेंस की सेटिंग बदलने के बाद, साइन-इन करने के किसी तरीके को कॉल करने पर, पर्सिस्टेंस की सेटिंग में हुए बदलाव को लागू करने से पहले, उस बदलाव के पूरा होने का इंतज़ार किया जाएगा.

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

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

डेटा के सेव रहने की मौजूदा स्थिति का पता लगाने के लिए, ये शर्तें लागू की जाएंगी.

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