当用户通过身份验证时,我会触发下面的云Firestore云功能;
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase)
exports.createUserAccount = functions.auth.user().onCreate((user) => {
const uid = user.uid
const firstName = user.firstName
const familyName = user.familyName
const displayName = user.displayName
const email = user.email
const photoURL = user.photoURL
const newUser = admin.firestore().doc(`/users/${uid}`)
return newUser.set({
firstName: firstName,
familyName: familyName,
displayName: displayName,
email: email,
photoURL: photoURL,
})
})
当一个用户匿名登录时,我遇到了一个问题。我试着添加一个const isAnonymous = user.isAnonymous
,然后在下面返回它;
return newUser.set({
isAnonymous: isAnonymous,
错误登录控制台
Error: Value for argument "data" is not a valid Firestore document. Cannot use "undefined" as a Firestore value (found in field isAnonymous).
我的问题是如何检查用户是否通过Firebase云功能匿名登录?
3条答案
按热度按时间hwazgwia1#
传递给auth函数的UserRecord对象永远不会有isAnonymous属性。这就是为什么它总是取值
undefined
。检查API文档的链接,看看那里有什么。我不知道你是如何得出结论,它应该在那里。每个验证过帐户的身份验证提供程序都存在于UserRecord对象的providerData数组属性中。您应该查看该数组以检查它是否是匿名帐户。具体来说,您应该检查
providerData
数组中每个UserInfo对象的providerId字段。我不能100%确定这是否是正确的方法,但根据我的观察,一个匿名帐户将有一个空providerData数组,因为它没有经过任何身份验证提供程序的验证。cu6pst1q2#
只要您使用的是基于电子邮件的身份验证(电子邮件+通行证& OAuth),那么您只需检查
文件
iezvtpos3#
据我所知,没有直接的API来检查一个用户是否是匿名的使用firebase管理sdk。通过检查一个用户一直是活跃的,没有任何连接的登录提供者,我相信它应该工作,但是。
请注意,激活检查的原因是为了过滤掉使用firebase控制台或admin sdk手动创建的用户。根据您的使用情况,您可能也希望将他们视为匿名用户。