【问题标题】:User is not defined firebase用户未定义火力基地
【发布时间】:2021-09-11 01:11:27
【问题描述】:

我正在尝试将一个对象推送到一个数组中,该数组保存给“用户”集合中的用户。我不断收到错误消息:未捕获的 ReferenceError: user is not defined on this line db.collection('users').doc(user.uid).get().then(doc => {

代码

  // Your web app's Firebase configuration
  var firebaseConfig = {
    apiKey: "####",
    authDomain: "###.firebaseapp.com",
    projectId: "#",
    storageBucket: "#.appspot.com",
    messagingSenderId: "#",
    appId: "1:####"
  };
  // Initialize Firebase
  firebase.initializeApp(firebaseConfig);
  const auth = firebase.auth()
  const db = firebase.firestore()
  db.settings({ timestampsInSnapshots: true })

</script>
<script>
  function savetodb() {
    db.collection('users').doc(user.uid).get().then(doc => {
        const saveditems1 = doc.data().saveditems
        const ob = {
          Name:'Test',
          Price:'Test',
          Link:'https://www.test.com'
        }
saveditems1.push(ob)

    });

用户登录,所以我不确定为什么会收到此错误。

【问题讨论】:

  • 我的意思是......你的(显示的)代码中没有任何地方是 user 定义
  • 虽然用户可能已“登录”,但这并未在环境中定义“用户”,因此,您必须从 Firebase Auth 请求用户以获取当前登录的用户。你没有这样做。此外,否决答案实际上会对我们产生负面影响,因为这是我们回答问题的工作。
  • 还应该提到用户身份验证是一个异步过程,您应该通过注册onAuthStateChanged()监听器等待它发生变化

标签: javascript html database firebase collections


【解决方案1】:

您尚未声明用户变量。要么声明如下:

const user = firebase.auth().currentUser

如果您在其他任何地方都不需要用户对象,也可以直接将其作为参数传递:

.doc(firebase.auth().currentUser.uid)

【讨论】:

    【解决方案2】:

    你应该在使用前初始化用户。

     // Your web app's Firebase configuration
      var firebaseConfig = {
        apiKey: "####",
        authDomain: "###.firebaseapp.com",
        projectId: "#",
        storageBucket: "#.appspot.com",
        messagingSenderId: "#",
        appId: "1:####"
      };
      // Initialize Firebase
      firebase.initializeApp(firebaseConfig);
      const auth = firebase.auth()
      const db = firebase.firestore()
      db.settings({ timestampsInSnapshots: true })
    
    </script>
    <script>
      function savetodb() {
        var user = firebase.auth().currentUser;
        db.collection('users').doc(user.uid).get().then(doc => {
            const saveditems1 = doc.data().saveditems
            const ob = {
              Name:'Test',
              Price:'Test',
              Link:'https://www.test.com'
            }
    saveditems1.push(ob)
    
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多