vue.js - vuejs 反应式身份验证小部件
问题描述
我在导航栏中有一个登录组件,可以在登录表单和注销按钮之间切换。
<div v-if="!loggedin">
<form action="post" class="form-inline">
<div class="container">
<input v-model="username" class="form-control mr-2" placeholder="Usuario" type="text" />
<input v-model="password" class="form-control mr-2" placeholder="Password" type="text" />
<button @click.prevent="login" class="btn btn-primary">Login</button>
</div>
</form>
</div>
<div v-else>
<button @click.prevent="logout" class="btn btn-danger">Logout</button>
</div>
export default {
data() {
return {
username: "",
password: ""
};
},
methods: {
login() {
if (this.username !== "" && this.password !== "") {
this.$store.dispatch("obtainToken", {
username: this.username,
password: this.password
});
}
console.log(this.logedin); // prints false on success
},
logout() {
this.$store.dispatch("deleteToken");
}
},
computed: {
...mapGetters(["loggedin"])
}
};
身份验证由vuex
jwt支持
export default new Vuex.Store({
state: {
jwt: localStorage.getItem('jwt'),
},
getters: {
loggedin: state => {
return state.jwt != null
}
},
mutations: {
updateToken(state, newToken) {
localStorage.setItem('jwt', newToken)
state.jwt = newToken
},
removeToken(state) {
localStorage.removeItem('jwt')
state.jwt = null
}
},
actions: {
obtainToken(context, credentials) {
console.log(credentials)
Axios.post('auth/token/', credentials)
.then((resp) => {
context.commit('updateToken', resp.data.token);
console.log(context.state.jwt)
})
.catch((err) => console.log(err))
},
deleteToken(context) {
context.commit('removeToken')
}
},
modules: {}
});
假设我已经存储了令牌,如果我按下注销按钮,小部件会立即返回以显示登录表单。但不是反过来。进行身份验证后,我必须刷新页面以使 vue 显示我的小部件的经过身份验证的状态部分。由于不显示,这会影响应用程序的其他部分。
不知道为什么它在注销而不是登录后起作用。两者都依赖于阅读商店吸气剂。有任何想法吗?
解决方案
没关系更改resp.data.token
并resp.data
修复它。
推荐阅读
- macos-catalina - macOS 终端登录失败
- python - Django + React 由于 MIME 类型(“text/html”)不匹配(X-Content-Type-Options:nosniff),资源被阻止
- javascript - 阻止来自所有通道 Discord.js 的命令
- sql - sql查询以更新具有两个以上子级的父级
- wordpress - Wordpress - 父类别和所有子类别的自定义模板页面
- bash - 如何使用 bash read 检测输入?
- bash - 为什么`echo $(find) | wc -l`没有正确计算文件数?
- javascript - 在 ReactJs 中一一映射对象数组,而不是列出数组
- instagram - https://www.instagram.com/{username}/?__a=1 在本地工作,但不在生产环境中工作
- c# - 使用 Microsoft Graph API 创建“在线会议活动”或仅在线会议