【问题标题】:Nuxt firebase write doc after createUserWithEmailAndPassword fail在 createUserWithEmailAndPassword 失败后 Nuxt firebase 写入文档
【发布时间】:2021-12-07 06:06:17
【问题描述】:

注册表单的思想是

  1. 将用户邮箱和密码添加到firebase auth,这样就成功了,那么
  2. 使用uid 作为文档ID 添加新文档并插入街道字段和值;到profile 集合,失败且没有错误。

用户和邮箱添加到firebase控制台的auth用户,但是文档写入仍然不成功,控制台也没有错误。

一直在挠头。

这是我的代码

<template>
    <v-form @submit.prevent="createUser">
        <v-text-field
            v-model="register.email"
            label="Email"
            required
        />
        <v-text-field
            v-model="register.password"
            label="Password"
            required
        />
        <v-text-field
            v-model="register.street"
            required
            label="Street"
        />
        <v-btn
            type="submit"
        >
            Register
        </v-btn>
    </v-form>
</template>

<script>
import Vue from 'vue'
import { createUserWithEmailAndPassword, onAuthStateChanged } from 'firebase/auth'
import { doc, setDoc } from 'firebase/firestore'
import { auth, db } from '~/plugins/firebase.js'

export default Vue.extend({
  data () {
    return {
      register: {}
    }
  },
  
  methods: {
    async createUser () {
      await createUserWithEmailAndPassword(
        auth,
        this.register.email,
        this.register.password
      ).catch((error) => {
        console.log(error.code)
        console.log(error.message)
      })

      onAuthStateChanged(
        auth,
        (user) => {
          if (user) {
            const ref = doc(db, 'profile', user.uid)
            const document = {
              street: this.register.street
            }
            try {
              setDoc(ref, document)
            } catch (e) {
              alert('Error!')
              console.error(e.code)
              console.error(e.message)
            }
          }
        }
      )
    }
  }
})
</script>

没有限制的firestore规则

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read;
      allow write;
    }
  }
}

【问题讨论】:

    标签: javascript firebase vue.js google-cloud-firestore nuxt.js


    【解决方案1】:

    尝试如下:

    async createUser () {
      await createUserWithEmailAndPassword(
        auth,
        this.register.email,
        this.register.password
      )
      .then((user) => {
          this.writeToFirestore(user)
      })
     .catch((error) => {
        console.log(error.code)
        console.log(error.message)
      })
    },
    
    async writeToFirestore(user) {
      if (user) {
        const ref = doc(db, 'profile', user.id)
        const document = {
          street: this.register.street
        }
        try {
          setDoc(ref, document)
        } catch (e) {
          alert('Error!')
          console.error(e.code)
          console.error(e.message)
        }
      }
    },
    

    【讨论】:

    • 谢谢,它有效。我这边做了一点修改,我把 this.writeToFirestore(user) 放在 onAuthStateChanged 里面,只是为了确保在用户在后端注册后进行写入。
    猜你喜欢
    • 1970-01-01
    • 2019-09-04
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多