如何在nuxt js中刷新页面时保持用户状态

时间:2020-05-26 05:32:11

标签: vue.js cookies vuex nuxt.js

我是Nuxt的新手,我以通用模式创建了一个项目,当页面刷新时,维护用户状态时出现问题,刷新时store和auth模块消失,因此无法从store上检索值刷新。

我尝试使用中间件从本地存储中检索数据,但是由于中间件在服务器端运行,试图在cookie中设置用户详细信息,但无法设置cookie,因此不可能。

有人可以建议一种维护页面刷新状态的最佳方法。

userLogin() {
      try {
        this.$axios.post('api/auth/Signin', this.login).then((res) => {
          this.$auth.setToken('local', 'Bearer ' + res.data.data.token)

          this.$axios.setHeader(
            'Authorization',
            'Bearer ' + res.data.data.token
          )
          this.$auth.ctx.app.$axios.setHeader(
            'Authorization',
            'Bearer ' + res.data.data.token
          )
          this.$axios.get('api/auth/User').then((res) => {
            this.$auth.setUser(res.data.user)
            this.$cookies.set('user', res.data.user, {
              path: '/',
              maxAge: 60 * 60 * 24 * 7
            })            
            this.$router.push('/')
          })
        })

      } catch (err) {
        console.log(err)
      }
    }

// middleware function 
export default function({ req, $auth, redirect, store }) {
  // redirect to login page if the user is not authenticated
  if (!$auth.isloggedIn) {
    if (!process.client) {
      const cookie = require('cookie')
      const cookies = req.headers.cookie
      const parsedCookies = cookie.parse(cookies)
      const token = parsedCookies['auth._token.local']
      const user = parsedCookies.user

      if (!token) return redirect('/login')
      else {
        store.dispatch('loginStatus', true)
        store.dispatch('setUser', user)
      }
    }
  }
}

0 个答案:

没有答案