Firebase Vue Vuefire UID 无法及时提供
2017-06-14
466
我尝试在有身份验证和单独用户的情况下让 vuefire/vue/firebase 工作。当我手动传递 UID 时,我可以让它工作……
let booksRef = db.ref('Users/' + 'SOhUKhcWzVRZmqe3AfcWMRwQR4r2' + '/Books');
但是,当我尝试用来自 Firebase 的 uid 替换硬编码的 uid 时,我得到一个空结果……它在调用时基本上还没有准备好,即使用户已登录……:
beforeCreate: function() {
var context = this;
Firebase.auth().onAuthStateChanged(function(user) {
if (user) {
currentUser = user;
context.currentUserId = user.uid;
context.currentUserEmail = user.email;
context.signedIn = true;
}
else {
context.currentUserId = null;
context.currentUserEmail = null; }
});
如何确保在创建数据集路径之前先获取 UID?
谢谢!
1个回答
在 GitHub 示例的帮助下,我弄清楚了这一点。
我在下面提供了 GitHub 链接。但简而言之,使用 auth 和 UID 时,您必须做一些不同的事情……Vuefire 对此没有很好的记录。您需要使用 VueJS 生命周期方法 beforeCreate ,以及特殊的 Vuefire 绑定 $bindAsArray 。
以下是显示用法的代码片段:
new Vue({
el: '#app',
beforeCreate: function() {
// Setup Firebase onAuthStateChanged handler
//
// https://firebase.google.com/docs/reference/js/firebase.auth.Auth
// https://firebase.google.com/docs/reference/js/firebase.auth.Auth#onAuthStateChanged
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
this.user = user
// https://github.com/vuejs/vuefire/blob/master/src/vuefire.js#L169
this.$bindAsArray('messages', db.ref('messages/' + user.uid))
} else {
// https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInAnonymously
firebase.auth().signInAnonymously().catch(console.error)
}
}.bind(this))
},
// Initialize reactive props, bind later when user is available
data: {
user: {},
messages: []
},
Sean Rasmussen
2017-06-14