我正在使用functions.auth.user().onCreate()
作为firestore项目的一部分,并尝试在新用户注册时设置一些默认数据。对于前端,我使用 firebase-ui,并启用了 Google 和电子邮件/密码提供商。
当我使用电子邮件和密码登录时,UI 小部件会提示输入名称并设置密码。我原本希望在 onCreate()
函数调用中看到该名称作为 user
参数的一部分,但我几乎什么也没得到:
user: { email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0179797941787878782f626e2f746a" rel="noreferrer noopener nofollow">[email protected]</a>',
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 提供商进行的注册会附带完整填充的用户
记录,因此我猜测这是电子邮件/密码的具体问题。
这是一个错误,还是我遗漏了什么?我在 context
参数中也没有看到任何其他有用的内容。
最佳答案
预计电子邮件+密码的 Cloud Functions onCreate
触发器中不会填充 displayName
。该函数由第一个 API 调用 (createUserWithEmailAndPassword()
) 触发,而显示名称则通过第二个 API 调用 (updateProfile
) 设置。
通常的解决方法是创建一个云函数来更新用户配置文件,如下所示:Firebase Auth+Functions | create user with displayName
我也强烈推荐filing a feature request能够在配置文件更改时触发云功能。
关于firebase - firebase auth onCreate 触发器应该有更多数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53396227/