【问题标题】:Check if User is Anonymous in Firestore Cloud Function检查用户是否在 Firestore 云功能中是匿名的
【发布时间】:2020-03-02 06:32:22
【问题描述】:

当用户通过身份验证时,我会在下面触发 Cloud Firestore Cloud Function;

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 云功能匿名登录?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore firebase-authentication google-cloud-functions


    【解决方案1】:

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

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

    【讨论】:

    • 我假设 isAnonymous 会给出一个布尔值。正如你提到的一个空数组,我得到了 providerData 。我将修改我的函数以检查 providerData 中的空数组并从那里继续我的逻辑。非常感谢。我要求添加一个 isAnonymous 布尔值,因为它看起来比检查空数组更合乎逻辑。
    • API 肯定会更好,请为此提交功能请求。 support.google.com/firebase/contact/support
    【解决方案2】:

    只要您使用基于电子邮件的身份验证(电子邮件+pass & OAuth),那么您可以简单地检查

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

    Docs

    【讨论】:

      猜你喜欢
      • 2018-10-16
      • 2023-03-26
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      • 2018-03-16
      • 1970-01-01
      相关资源
      最近更新 更多