Firebase云函数无法读取未定义的属性“ displayName”

时间:2020-02-02 12:46:49

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

我要在我的android应用中google登录后在实时数据库中创建用户个人资料。 因此,我已经尝试过在云函数中执行此代码。

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)

请帮助我解决此错误

1 个答案:

答案 0 :(得分:0)

方法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,然后再推送新功能,这样可以节省您的时间:)