1

当有身份验证和单独的用户时,我试图让 vuefire/vue/firebase 工作。当我手动传递 UID 时,我可以让它工作......

let booksRef = db.ref('Users/' + 'SOhUKhcWzVRZmqe3AfcWMRwQR4r2' + '/Books');

但是,当我尝试将硬编码的 uid 替换为来自 Firebase 的 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?

谢谢!

4

1 回答 1

2

在 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: []
  },

在此处查看完整的 github 示例:

于 2017-06-14T20:01:58.140 回答