NuxtServerInit在重新加载后设置Vuex身份验证状态

时间:2019-01-26 17:06:02

标签: javascript vuex nuxt

我正在使用select top (1) with ties 1 as rownum, salary, name, endmonth, name from employee e order by e.endmonth desc; 函数解析的具有JWT令牌和cookie的Nuxt项目上设置基本身份验证。

使用电子邮件/密码登录后,按预期方式工作,触发nuxtServerInit突变,并将适当的setUser对象存储在user中。

重新加载时,state.auth.user将从nuxtServerInit获取jwt令牌,调用req.headers.cookies方法并标识user.Works,就像一个超级按钮。

当我碰到GET端点时,问题开始了。 /logout设置为false并且Im已有效注销...但是如果刷新,我将使用先前的用户数据再次登录。即使我的Cookie完全是空的(在下面的代码中,state.auth.useruser都在注销并刷新后按预期cookie

所以我真的不明白为什么我的undefined回到了初始值...

store / index.js

state.auth.user

modules / auth.js

import Vuex from "vuex";
import auth from "./modules/auth";
import axios from "~/plugins/axios";

const cookieparser = process.server ? require("cookieparser") : undefined;
const END_POINT = "api/users";


const createStore = () => {
  return new Vuex.Store({
    actions: {
     async nuxtServerInit({ commit, dispatch}, { req }) {
        let cookie = null;
        console.log(req.headers.cookie)
        if (req.headers.cookie) {
          const parsed = cookieparser.parse(req.headers.cookie);
          try {
            cookie = JSON.parse(parsed.auth);
            console.log("cookie", cookie)
            const {accessToken} = cookie
            const config = {
              headers: {
                Authorization: `Bearer ${accessToken}`
              }
            }
            const response = await axios.get(`${END_POINT}/current`, config)

            const user = response.data
            console.log("user nuxt server init", user)
            await commit('setUser', user)
          } catch (err) {
            // No valid cookie found
            console.log(err);
          }
        }
      }
    },
    modules: {
      auth
    }
  });
};

export default createStore;


1 个答案:

答案 0 :(得分:0)

我注销用户的方式是创建一个名为 clearToken 的变更并在操作中提交给它:

状态:

token: null,

突变:

clearToken(state) {
    state.token = null
  },

操作:

logout(context) {
    context.commit('clearToken')
    Cookie.remove('token')
}

通过这种方式,您的令牌状态会恢复为 null。