我正在将functions.auth.user().onCreate()
用作Firestore项目的一部分,并试图在新用户注册时设置一些默认数据。对于前端,我使用的是firebase-ui,并启用了Google和电子邮件/密码提供程序。
当我使用电子邮件和密码登录时,UI小部件会提示您输入名称并设置密码。我期望在user
函数调用中将名称作为onCreate()
参数的一部分,但实际上却什么也没得到:
user: { email: 'xxx@yyyy.co.uk',
emailVerified: false,
displayName: null,
photoURL: null,
phoneNumber: null,
disabled: false,
providerData: [],
customClaims: {},
passwordSalt: null,
passwordHash: null,
tokensValidAfterTime: null,
metadata:
UserRecordMetadata {
creationTime: '2018-11-20T15:06:01Z',
lastSignInTime: '2018-11-20T15:06:01Z' },
uid: 'QDJ5OJTwbvNo2QNDVQV9VsxC2pz2',
toJSON: [Function] }
甚至没有获得提供者的信息,因此我可以判断用户注册的是哪种“种类”。就像在填充用户记录之前触发了此功能(电子邮件地址确实通过)。另外,通过Google提供程序进行的注册带有完整填充的user
记录,因此我想这尤其是电子邮件/密码问题。
这是一个错误,还是我缺少一些东西?我也没有在context
参数中看到其他有用的东西。
答案 0 :(得分:1)
预计电子邮件和密码的云功能displayName
触发器中未填充onCreate
。该功能从第一个API调用(createUserWithEmailAndPassword()
)触发,而显示名称由第二个API调用(updateProfile
)设置。
通常的解决方法是创建一个Cloud Function以更新用户配置文件,如下所示:Firebase Auth+Functions | create user with displayName
我还强烈建议filing a feature request能够在配置文件更改时触发Cloud Function。