प्रमाणीकरण राज्य दृढ़ता

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

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

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

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

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

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

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

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

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

आप firebase.auth().setPersistence विधि को कॉल करके मौजूदा प्रकार की दृढ़ता को निर्दिष्ट या संशोधित कर सकते हैं:

Web version 9

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 version 8

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 )।
  • यदि कोई उपयोगकर्ता साइन इन नहीं है और एक नए प्रकार का दृढ़ता सेट है, तो भविष्य में साइन-इन करने का कोई भी प्रयास उस प्रकार की दृढ़ता का उपयोग करेगा।
  • यदि उपयोगकर्ता साइन इन है और दृढ़ता प्रकार संशोधित किया गया है, तो मौजूदा साइन इन उपयोगकर्ता दृढ़ता को नए में बदल देगा। भविष्य के सभी साइन-इन प्रयास उस नई दृढ़ता का उपयोग करेंगे।
  • जब साइनइनविथरेडायरेक्ट को कॉल किया जाता है, तो मौजूदा हठ प्रकार को बनाए रखा जाता है और ओएथ प्रवाह के अंत में नए साइन इन उपयोगकर्ता पर लागू किया जाता है, भले ही हठ none था। यदि दृढ़ता उस पृष्ठ पर स्पष्ट रूप से निर्दिष्ट है, तो यह पुनर्निर्देशन प्रवाह प्रारंभ करने वाले पिछले पृष्ठ से अनुरक्षित प्रमाणन स्थिति दृढ़ता को ओवरराइड कर देगी।

    Web version 9

    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 version 8

    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 और अन्य सभी टैब पर, उपयोगकर्ता साइन आउट किया जाएगा।