【问题标题】:Firebase SnapShot.val() returns null when trying to access data in vuexFirebase SnapShot.val() 在尝试访问 vuex 中的数据时返回 null
【发布时间】:2020-05-16 02:13:36
【问题描述】:

我正在创建一个学生、教职员工和非教学人员都可以访问的应用程序。

我的表单数据如下所示:

formData: {
      name: "",
      email: "",
      password: "",
      select: null
    },
    options: ["Student", "Staff", "Non-Teaching Staff"],

当然,在 Vuex 商店我可以注册用户:

registerUsers({}, payload) {
    firebaseAuth.createUserWithEmailAndPassword(payload.email, payload.password)
      .then(res => {
        const userId = firebaseAuth.currentUser.uid;
        console.log(res)
        Notify.create({
          message: 'Regsitration Successful!.',
          color: 'primary',
          classes: 'quick'
        })
        //set student
        firebaseDb.ref(`users/'${userId}`).set({
          name: payload.name,
          email: payload.email,
          select: payload.select
        });
      })
      .catch(err => {
        console.log(err)
        Notify.create({
          message: `${err.message}`,
          classes: 'quick',
          color: 'negative'
        })
      })

我也可以登录用户:

loginUsers({}, payload) {
    firebaseAuth.signInWithEmailAndPassword(payload.email, payload.password)
      .then(res => {
        console.log(res);
        Notify.create({
          message: 'Success!',
          classes: 'quick',
          color: 'positive'
        })
      })
      .catch(err => {
        console.log();
        Notify.create({
          message: `${err.message}`,
          classes: 'quick',
          color: 'negative'
        })
      })
  },

问题来自于此:

handleAuthStateChange() {
    firebaseAuth.onAuthStateChanged(user => {
      if (user) {
        //set Student
        const studentId = firebaseAuth.currentUser.uid;
        console.log(studentId)
        firebaseDb.ref(`users/${studentId}`).once('value', snapshot => {
          console.log(snapshot.val())
        })
      }
    })
  },

Snapshot.val() 在控制台中返回 null。

我写错了。

【问题讨论】:

    标签: javascript firebase vue.js firebase-realtime-database vuex


    【解决方案1】:

    看来,通过调用firebaseDb.ref(`users/'${userId}`).set({...}),您正在一个节点下创建您的用户

    users/'userId
    

    单引号 (')。

    然后你尝试读取节点

    users/userId
    

    如果您错误地添加单引号的假设是正确的,则不存在。


    另外注意不需要做

    firebaseAuth.createUserWithEmailAndPassword(payload.email, payload.password)
      .then(res => {
        const userId = firebaseAuth.currentUser.uid;
        //...
    

    因为createUserWithEmailAndPassword() 返回一个UserCredential。所以你可以这样做:

    firebaseAuth.createUserWithEmailAndPassword(payload.email, payload.password)
      .then(res => {
        const userId = res.user.uid;
        //...
    

    你也可以这样做:

    handleAuthStateChange() {
        firebaseAuth.onAuthStateChanged(user => {
          if (user) {
            const studentId = user.uid;
            //......
    

    【讨论】:

    • 单引号是问题,非常感谢
    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    相关资源
    最近更新 更多