【发布时间】:2019-02-02 07:17:12
【问题描述】:
我正在尝试基于onAuthStateChanged Firebase 函数有条件地显示导航组件的导航栏元素。
<template>
<navbar dark position="top" class="default-color" scrolling>
<mdb-navbar-brand href="#/" style="font-weight: bolder;">
Test
</mdb-navbar-brand>
<navbar-collapse>
<navbar-nav left>
<navbar-item href="#/" waves-fixed>Home</navbar-item>
<navbar-item href="#/css" waves-fixed>About</navbar-item>
<navbar-item href="#/jobs" waves-fixed>Jobs</navbar-item>
<navbar-item href="#/advanced" waves-fixed>Profile</navbar-item>
</navbar-nav>
<navbar-nav right>
<router-link to="/signup"><button v-if="!user" type="button" class="btn btn-primary">Signup</button></router-link>
<router-link to="/login"><button v-if="!user" type="button" class="btn btn-primary">Login</button></router-link>
<p><a v-if="user" @click="logout">Logout</a></p>
</navbar-nav>
</navbar-collapse>
</navbar>
</template>
<script>
import Navbar from '@/components/Navbar.vue';
import NavbarItem from '@/components/NavbarItem.vue';
import NavbarNav from '@/components/NavbarNav.vue';
import NavbarCollapse from '@/components/NavbarCollapse.vue';
import mdbNavbarBrand from '@/components/NavbarBrand.vue';
import firebase from 'firebase';
export default {
name: 'Navigation',
data() {
return {
user: null,
};
},
components: {
Navbar,
NavbarItem,
NavbarNav,
NavbarCollapse,
mdbNavbarBrand
},
methods: {
logout() {
firebase.auth().signOut()
.then(() => {
this.$router.push({path: '/'});
});
},
created() {
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
this.user = user;
} else {
this.user = null;
}
});
}
}
};
</script>
不幸的是,由于某种原因,onAuthStateChanged 无法正常工作。我还尝试从组件的角度简单地在控制台中显示用户,但效果不佳:
console.log(firebase.auth().currentUser);
提前感谢您的任何提示。
【问题讨论】:
-
那么用户的价值呢? (我的意思是您使用 this.user = user 设置的 vue 数据属性)。它仍然是空的吗?另外,created() 不应该在方法之外,被视为生命周期钩子吗?
-
是的,即使有活动的登录用户,它仍然为空。看起来该方法无法更新用户数据属性。尝试在创建钩子期间使用固定值而不使用 firebase 函数简单地更新它 - 也没有成功。
-
你声明created的方式不是如何声明hook。见vuejs.org/v2/guide/instance.html#Instance-Lifecycle-Hooks。它应该与方法处于同一级别。
标签: firebase vue.js firebase-authentication