मेरे पास एक ऐसा एप्लिकेशन है जो ईमेल और पासवर्ड और GoogleAuth दोनों द्वारा लॉग इन करता है, लेकिन लॉग इन करने के बाद, यदि उपयोगकर्ता पृष्ठ को पुनः लोड करता है, तो यह लॉग आउट हो जाता है।

मैं GoogleAuthProvider, signInWithEmailAndPassword और setPersistence को प्रबंधित करने का प्रयास कर रहा हूं। इस उदाहरण के लिए, बस Google के साथ लॉगिन फ़ंक्शन का पालन करें। मैंने इसे निम्नानुसार किया:

Login.vue

import { getAuth, setPersistence, inMemoryPersistence, GoogleAuthProvider, signInWithPopup, } from "firebase/auth";

googleSignIn: function() {
   const auth = getAuth();
   const provider = new GoogleAuthProvider();
   signInWithPopup(auth, provider)
     .then(() => {
       setPersistence(auth, inMemoryPersistence);
       this.$router.push("/");
     })
     .catch((error) => {
       // error messages
       }
     });
},

मैंने यहां जो देखा, उसे लागू करने की कोशिश कर रहा हूं: https://firebase .google.com/docs/auth/web/auth-state-persistence

दूसरी ओर, मूल घटक (लॉग इन करने के बाद) में, मुझे बिना किसी समस्या के उपयोगकर्ता डेटा मिल रहा है:

Header.vue

import { getAuth, onAuthStateChanged } from "firebase/auth";

export default {
   date: () => ({ username: "" }),
   created() {
     const auth = getAuth();
     onAuthStateChanged(auth, (user) => {
       if (user) {
         this.username = user.displayName;
       } else {
         this.username = "logged out";
       }
     });
   },
};

संपादित करें

मैं यहां एप्लिकेशन में सहेजे गए डेटा को शामिल कर रहा हूं। फिर भी, उपयोगकर्ता को पुनः लोड करते समय लॉग आउट हो जाता है।

Console Application

0
Arnon 4 सितंबर 2021, 13:27

2 जवाब

सबसे बढ़िया उत्तर

यही इरादा व्यवहार है। आप प्रामाणिकता को inMemoryPersistencce पर सेट कर रहे हैं। दस्तावेज़ीकरण कहता है,

NONE (inMemoryPeristence) इंगित करता है कि राज्य केवल स्मृति में संग्रहीत किया जाएगा और विंडो या गतिविधि ताज़ा होने पर साफ़ हो जाएगा।

दृढ़ता को SESSION या LOCAL पर सेट करने का प्रयास करें।


अगर मैं देव उपकरण खोलता हूं, तो मैं देख सकता हूं कि मैं प्रमाणित हूं। ऐसा लगता है कि समस्या यहां आपके रीडायरेक्ट के साथ है:

router.beforeEach((to, from, next) => {
  // This currentUser maybe undefined
  const currentUser = getAuth().currentUser;

  // ...
  else next();
});

beforeEach में onAuthStateChanged() का प्रयोग करके देखें:

router.beforeEach((to, from, next) => {
  const auth = getAuth()

  onAuthStateChanged(auth, (user) => {
    if (!user) return next("login"); 
  })
})
1
Dharmaraj 4 सितंबर 2021, 15:06

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

1
Frank van Puffelen 4 सितंबर 2021, 14:40