Javascript 在Firestore云函数中检查用户是否匿名
当用户通过身份验证时,我触发下面的CloudFireStore云函数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) => {
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
}