【发布时间】:2017-09-20 09:49:15
【问题描述】:
我有一个网站,登录时我把登录时的用户名放在 localStorage 上。所以这是在 Login.Vue 上
login() {
axios.post('/login', this.user)
.then((response) => {
alertify.set('notifier','delay', 3);
alertify.success("Success! You are now logged in.");
axios.get("/user", this.user)
.then((response) => {
this.$router.push('/home');
AuthPlugin.setUser(this.user.username);
})
})
.catch(function (error) {
alertify.set('notifier','delay', 0);
alertify.error('Invalid User');
});
}
我使用我制作的 AuthPlugin 来做到这一点:
setUser(user) {
localStorage.setItem('authUser', user);
}
在每个页面上的组件 Header.vue 上,我的用户名显示在每个页面上,表明他在线。
<template>
<div id="header-bar" v-if="!username">
<nav class="navbar navbar-toggleable-md navbar-light bg-faded p-0 fixed-top">
<a href="#">Your are online {{username}}</a>
<a href="#" @click="logout">Log out</a>
</nav>
</div>
</template>
<script>
import AuthPlugin from '../../plugin/Auth.js';
import axios from 'axios';
export default {
data() {
return {
users: {},
username: localStorage.authUser
}
},
methods: {
logout() {
AuthPlugin.destroyToken();
AuthPlugin.destroyUser();
this.$router.push('/');
},
getUsers() {
axios.get("/user")
.then((response) => {
this.users = response;
})
}
}
}
</script>
在注销时我会销毁 AuthPlugin 中的令牌和用户
destroyToken() {
localStorage.removeItem('token');
localStorage.removeItem('authTokenExpiration');
},
destroyUser() {
localStorage.removeItem('authUser');
}
我将 App.vue 上的 header comp 放在每个页面上。
<template>
<div>
<app-header></app-header>
<router-view></router-view>
</div>
</template>
所以当我注销时,我会从 localStorage 中删除 authUser。我希望当我单击注销并重定向到“/”,这是登录组件时,该标题被隐藏。
这些是路线
export const routes = [
{path: '/', component: Login},
{path: '/home', component: Home, meta: {requiresAuth: true}},
{path: '/events', component: Events, meta: {requiresAuth: true}},
{path: '/events/new-event', component: NewEvent, meta: {requiresAuth: true}},
{path: '/events/edit-event/:id', component: EditEvent, meta: {requiresAuth: true}}
]
现在如果我点击注销,当我被重定向到登录时,标题消失了,但是当我输入用户名并传递给登录并进入网站时,标题仍然隐藏。
为什么标题是隐藏的?如果我在浏览器控制台中输入 localStore.authUser 并回车,我会看到我用来登录的用户名。
请有人告诉我,我在那个 v-if 中做错了什么?或者请告诉我是否可以使用 diff 方法在注销时隐藏该标题。
【问题讨论】:
标签: vue.js