【问题标题】:Firebase cloud function cannot read property 'displayName' of undefinedFirebase 云功能无法读取未定义的属性“displayName”
【发布时间】:2020-05-18 10:35:35
【问题描述】:

我想在我的安卓应用程序中谷歌登录后在实时数据库中创建用户配置文件。 所以,我已经在云函数中尝试了这段代码。

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.AddAccount = functions.auth.user().onCreate(event => {

    const user = event.data;
    var userObject = {
        displayName : user.displayName,
        email : user.email,
        photoUrl : user.photoURL,
        createdOn : user.metadata.createdAt
    };
    admin.database().ref('users/' + user.uid).set(userObject);
});

部署此代码后,我在我的应用程序中进行了测试。 并且显示错误。

TypeError: Cannot read property 'displayName' of undefined
at exports.AddAccount.functions.auth.user.onCreate.event (/srv/index.js:10:22)
at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:131:23)
at /worker/worker.js:825:24
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)

请帮我解决这个错误

【问题讨论】:

    标签: node.js firebase firebase-authentication google-cloud-functions


    【解决方案1】:

    onCreate 方法返回一个用户对象,而不是一个带数据的事件:

    exports.AddAccount = functions.auth.user().onCreate(user => {
      const userObject = {
        displayName : user.displayName,
        email : user.email,
        photoUrl : user.photoURL,
        createdOn : user.metadata.createdAt
      };
    
      return admin.database().ref('users/' + user.uid).set(userObject);
    });
    

    关于另一个错误。不允许导入值为undefined 的属性。这应该被定义,null 或者根本不放。

    您收到错误的原因是metadata 对象具有creationTime 属性。

    为了安全起见,你可以这样做:

    const userObject = {
      displayName : user.displayName,
      email : user.email,
      photoUrl : user.photoURL,
      createdOn : user.metadata.creationTime || null
    };
    

    建议在推送新功能之前先阅读文档和API,这样可以节省您的时间:)

    【讨论】:

    • 我已经尝试过您的代码,但它显示新错误。 Error: Reference.set failed: First argument contains undefined in property 'users.GvnKc7CF1mMZRzSA27fJ491tLID3.createdOn' .......
    • @RachitSingh 我已经更新了我的答案以帮助您解决其他错误
    • 感谢您的帮助。在数据库中创建配置文件但显示错误Function returned undefined, expected Promise or value 为什么?
    • 这是一个完全不同的问题。当所有异步工作完成时,您需要从函数返回一个承诺。这不是可选步骤。 firebase.google.com/docs/functions/terminate-functions
    猜你喜欢
    • 2018-12-05
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2019-03-18
    • 2020-05-22
    • 1970-01-01
    相关资源
    最近更新 更多