我要在我的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)
请帮助我解决此错误
答案 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,然后再推送新功能,这样可以节省您的时间:)