【问题标题】:Firebase: TypeError: Cannot read properties of undefined (reading 'getIdToken')Firebase:TypeError:无法读取未定义的属性(读取'getIdToken')
【发布时间】:2022-01-22 15:08:57
【问题描述】:

所以我在学习 Firebase / React 教程 (https://www.youtube.com/watch?v=m_u6P5k0vP0&t=2656s) 时遇到了问题。我在 auth 部分尝试设置新用户,并且我成功地将新用户带入我在 firebase 上的 Auth 部分,但我没有取回他们的 id 令牌,因此我无法继续以编程方式创建用户集合.目前我在命令行上看到 TypeError 并在 Postman 中用空 JSON 字符串返回 500 错误。关于我在 data.user.getIdToken() 中缺少的任何想法?

const functions = require("firebase-functions");
const admin = require('firebase-admin');
const app = require('express')();

const firebaseConfig = {
  apiKey: "***",
  authDomain: "***",
  databaseURL: "***",
  projectId: "***",
  storageBucket: "***",
  messagingSenderId: "***",
  appId: "***",
  measurementId: "***"
};


admin.initializeApp(firebaseConfig);
const db = admin.firestore();


// First function is to get all screams (feed posts)
app.get('/screams', (req, res) => {
  db
    .collection('screams')
    .orderBy('createdAt', 'desc')
    .get()
    .then((data) => {
      let screams = [];
      data.forEach((doc) => {
        screams.push({
          screamId: doc.id,
          body: doc.data().body,
          userHandle: doc.data().userHandle,
          createdAt: doc.data().createdAt
        });
      });
      return res.json(screams);
    })
    .catch((err) => console.error(err))
})

// Second functions is to create ie post new screams from a json format
app.post('/screams', (req, res) => {

  const newScream = {
    body: req.body.body,
    userHandle: req.body.userHandle,
    createdAt: new Date().toISOString()
  };

  db.collection('screams').add(newScream).then((doc) => {
    res.json({ message: `document ${doc.id} created successfully` })
  })
  .catch((err) => {
    res.status(500).json({ error: 'something went wrong' });
    console.error(err);
  })
});

// Signup route
app.post("/signup", (req, res) => {
  const newUser = {
    email: req.body.email,
    password: req.body.password,
    confirmPassword: req.body.confirmPassword,
    handle: req.body.handle
  };

  db.doc(`/users/${newUser.handle}`).get()
    .then( 
      doc => {
        if(doc.exists){
          return res.status(400).json({ handle: 'This handle already taken' });
        } else {
          return  admin
          .auth()
          .createUser({
            email: newUser.email,
            password: newUser.password,
          })
        }
      })
      .then(data => {
        data.user.getIdToken();
      })
      .then(token => {
        return res.status(201).json({ token });
      })
      .catch((err) => {
        console.error(err);
        return res.status(500).json({ error: err.code });
      });

});

// export api allows us to use express for our function formating
exports.api = functions.https.onRequest(app);
  TypeError: Cannot read properties of undefined (reading 'getIdToken')
      at /Users/tmac/Desktop/SMTutorial/functions/index.js:84:22
      at processTicksAndRejections (node:internal/process/task_queues:96:5)

【问题讨论】:

    标签: javascript node.js reactjs firebase


    【解决方案1】:

    createUser() 方法返回一个没有user 属性的UserRecord。此外,您似乎正在尝试使用 Admin SDK 获取用户的 ID 令牌,这在本地是不可能的。结帐In firebase - How to generate an idToken on the server for testing purposes?了解更多信息。

    在服务器上创建用户后,您可以简单地发回响应,然后使用 Firebase 客户端 SDK 登录用户。还可以尝试重构代码,如下所示:

    app.post("/signup", async (req, res) => {
      const newUser = {
        email: req.body.email,
        password: req.body.password,
        confirmPassword: req.body.confirmPassword,
        handle: req.body.handle
      };
    
      const userDoc = await db.doc(`/users/${newUser.handle}`).get()
      if (userDoc.exists) {
        return res.status(400).json({ handle: 'This handle already taken'});
      }
    
      // Create user
      await admin.auth().createUser({ email: newUser.email, password: newUser.password })
    
      return res.json({ data: "User created" })
    })
    

    客户端的流程可以是这样的:

    1. 用户输入凭据并触发“/signup”API
    2. 服务器返回成功响应后,使用 Firebase 客户端 SDK 使用相同凭据登录用户。

    【讨论】:

      猜你喜欢
      • 2017-03-01
      • 1970-01-01
      • 2023-03-11
      • 2022-01-15
      • 2021-12-31
      • 2021-12-13
      • 2021-11-28
      • 2021-11-15
      • 2021-11-06
      相关资源
      最近更新 更多