【发布时间】:2019-12-01 20:14:40
【问题描述】:
我有一个名为 login.js 的 vuex 存储模块,如下所示
import axios from "axios";
import router from "@/router";
axios.defaults.baseURL = process.env.VUE_APP_API_ENDPOINT;
const state = {
access_token: localStorage.getItem("access_token") || null,
};
const getters = {
loggedIn() {
return (
state.access_token != null && localStorage.getItem("access_token") != null
);
}
};
const mutations = {
doLogin(state, response) {
const token = response.authentication_data.access_token;
localStorage.setItem("access_token", token);
state.access_token = token;
router.push("/admin");
};
const actions = {
async getToken({ commit }, userdata) {
let email = userdata.email;
let password = userdata.password;
let remember_me = userdata.remember_me;
await axios
.post("auth/login", null, {
params: {
email,
password,
remember_me
}
})
.then(response => {
if (response.data.meta.status == "true") {
commit("doLogin", response.data);
} else {
alert("wrong password");
}
})
.catch(error => {
alert(error);
});
};
export default {
state,
getters,
actions,
mutations
};
login.vue 代码
methods: {
...mapActions(["getToken"]),
login() {
const userdata = {
email: this.email,
password: this.password,
remember_me: true
};
this.getToken(userdata);
}
}
登录功能有效,并且第一次设置了令牌,但是当我刷新浏览器时,access_token 消失了。
在浏览器中如下图所示
但如果我通过开发工具提交,它会起作用并且状态会变得持久。
关于 SO 的类似性质的问题,但不回答这个问题。
vuex commit does not commit to store
Vue2 + Vuex Commit Not Committing (without Vue devtools)
Vuex Mutation running, but component not updating until manual commit in vue dev tools
如何通过代码使state.access_token 持久化?问题在于页面刷新我丢失了state.access_token 值。
【问题讨论】:
-
尝试使用这个github.com/robinvdvleuten/vuex-persistedstate,我在我的商店中使用它>index.js 像这样: import createPersistedState from 'vuex-persistedstate' import Cookies from 'js-cookie' Vue.use(Vuex) // 创建一个新的 store const store = new Vuex.Store({ plugins: [ createPersistedState({ getState: (key) => Cookies.getJSON(key), setState: (key, state) => Cookies.set(key, state, { expires: 3, secure: false }) }) ], actions, getters, mutation, state }) 但你可以使用 localStorage 代替 cookies
-
@Sdpotts93 这不是关于本地存储,而是
state.access_token -
@Techie 如果您希望它在页面刷新后持续存在,您需要将其存储在 本地存储 中。
-
请参考代码示例。我已经存储了 access_token 并检索了
标签: javascript vue.js vuejs2 vuex vuex-modules