جافاسكريبت - إعادة ضبط مستخدم Nuxt auth بعد تحديث المتصفح


أنا أقوم ببناء تطبيق يحتوي على تسجيل دخول وتسجيل معلومات المستخدم. أستخدم وحدة nuxt/auth للتعامل مع المصادقة. كلما قام المستخدم بتسجيل الدخول، تتغير الحالة إلى true بدون مشكلة. المشكلة الوحيدة التي أواجهها هي أنه عند استدعاء طريقة تعيين المستخدم، يتم تسجيل معلومات المستخدم بنجاح، ولكن كلما قمت بتحديث المتصفح أفقد بيانات المستخدم على الرغم من أنه تم تعيينها بنجاح في البداية.

إعداداتي في nuxt.js لوحدة مصادقة nuxt

auth: {
        strategies: {
          local: {
            token: {
              property: "token",
              global: true,
            },
            redirect: {
                "login": "/account/login",
                "logout": "/",
                "home": "/page/ajouter-produit",
                "callback": false
            },
            endpoints: {
              login: { url: "http://localhost:5000/login", method: "post" },
              logout: false, //  we don't have an endpoint for our logout in our API and we just remove the token from localstorage
              user:false
            }
          }
        }
      },

مكون التسجيل/تسجيل الدخول الخاص بي

        async typeForm(e) {
            this.typesubmit = true;
            // stop here if form is invalid
            this.$v.$touch();
            if (this.$v.typeform.$anyError) {
                return;
            }
            const user = await axios.post(`${baseUrl}register`,{
                username:this.typeform.username,
                password:this.typeform.password,
                email:this.typeform.email,
                tel:this.typeform.tel,
                adresse:this.typeform.adresse,
                store:this.typeform.store,
            })
            .then(response => {
                console.log(response.data)
                return response.data.user;
            }).catch( (error) => {
                this.error = ''
                this.error = error.response.data
            })

            if(user){
                let loginData = {email:this.typeform.email,  password:this.typeform.password} 
                const response = await this.$auth.loginWith('local', { data: loginData})
                .then(response => {
                this.$auth.setUser(response.data.user) // the user is set without a problem, everything works fine.
                return response.data;
                }).catch( (error) => {
                    this.errors = error.response.data
                    console.log(error.response)
                })
            }
            
        }

عندما أقوم بعرض الحالة والمستخدم في وحدة التحكم في المقام الأول، كل شيء يعمل بشكل جيد

  console.log(this.$store.state.auth.user) // logs all user data i get from the api call. but when i refresh i get an empty object 
  console.log(this.$store.state.auth.loggedIn) // logs true , and even after i refresh it's still true

من فضلك ساعد

الإجابة رقم 1

تم حل المشكلة. ما فعلته هو أن أضفت إلى وظيفة تسجيل الدخول الخاصة بي

this.$auth.$storage.setUniversal('user', response.data.user, true)

يعمل كالماكينة الساحرة.

الإجابة رقم 2

لدي نفس المشكلة. بعد إضافة هذا: $auth.$storage.setUniversal('user', response.data.user, true)، يتم تسجيل خروج المستخدم بعد تحديث الصفحة.

إليك شفرتي:

  this.$auth
    .loginWith("local", {
      data: {
        email: this.connexionLogin,
        password: this.connexionPassword
      }
    })
    .then( (response) => {
        this.$auth.setUser(response.data.user);
        this.$auth.$storage.setUniversal('user', response.data.user, true)
  
        this.$emit("connexionOk");

وملف nuxt.config الخاص بي :

auth: {
    watchLoggedIn: true,
    resetOnError: true,
    redirect: {
      login: "/admin/login",
      logout: "/admin/login",
      callback: "/callback",
      home: '/admin/', // Pour ne pas être redirigé vers la home suite authentification
    },
    strategies: {
      local: {
        token: {
          property: "tokens.access.token",
        },
        user: {
          property: 'user',
          autoFetch: false
        },
        endpoints: {
          login: {
            url: "v1/auth/login",
            method: "post",            
          },
          logout: false,
        },
      },
    },
  },