Javascript 在Firestore云函数中检查用户是否匿名

Javascript 在Firestore云函数中检查用户是否匿名,javascript,firebase,google-cloud-firestore,firebase-authentication,google-cloud-functions,Javascript,Firebase,Google Cloud Firestore,Firebase Authentication,Google Cloud Functions,当用户通过身份验证时,我触发下面的CloudFireStore云函数 const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(functions.config().firebase) exports.createUserAccount = functions.auth.user().onCreate((user) => {

当用户通过身份验证时,我触发下面的CloudFireStore云函数

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,
    })
}) 
当用户匿名登录时,我遇到了一个问题。我尝试添加一个
常量isAnonymous=user.isAnonymous
,然后在下返回它

return newUser.set({
    isAnonymous: isAnonymous,
登录控制台时出错 我的问题是如何检查用户是否通过Firebase云函数匿名登录?

传递给auth函数的对象上永远不会有isAnonymous属性。这就是为什么它总是取未定义的值。查看API文档的链接以了解其中的内容。我不知道你是怎么得出结论说它应该在那里的


已验证帐户的每个身份验证提供程序都存在于UserRecord对象的数组属性中。您应该查看该数组以检查它是否是匿名帐户。具体来说,您应该检查
providerData
数组中每个UserInfo对象的字段。我不能100%确定这是否是正确的方法,但根据我的观察,匿名帐户将有一个空的providerData数组,因为它没有经过任何身份验证提供商的验证。

只要您使用基于电子邮件的身份验证(电子邮件+密码和OAuth),您就可以简单地进行检查

if (user.email !== null){ 
  // Run this code if the user is not anonymous
}

我假设isAnonymous将给出一个布尔值。我已经得到了providerData,正如您提到的,它是一个空数组。我将修改我的函数以检查providerData中是否有空数组,并从那里继续我的逻辑。非常感谢。我会请求添加一个isAnonymous布尔值,因为它看起来比检查空数组更符合逻辑。API肯定会更好,请为此提交一个功能请求。
if (user.email !== null){ 
  // Run this code if the user is not anonymous
}