将数据保存到Firebase用户对象中

将数据保存到Firebase用户对象中,firebase,firebase-authentication,Firebase,Firebase Authentication,使用此选项: firebase.auth().onAuthStateChanged(function(user){ if (user){ Firebase正在返回用户,其中包括一个userID。 当一个网页获得这个对象时,它需要用户ID,并且需要再次访问DB记录来检查一些非常基本的内容(如果是付费用户,或者其他简单的键),以便选择UI 是否可以在此回调中返回包含有关用户的预定义基本信息的用户?如果要向用户帐户添加一些额外信息,则不能使用具有固定属性列表的对象 有两种经典方法: 1.创建

使用此选项:

firebase.auth().onAuthStateChanged(function(user){
    if (user){
Firebase
正在返回用户,其中包括一个
userID
。 当一个网页获得这个对象时,它需要用户ID,并且需要再次访问DB记录来检查一些非常基本的内容(如果是付费用户,或者其他简单的键),以便选择UI


是否可以在此回调中返回包含有关用户的预定义基本信息的用户?

如果要向用户帐户添加一些额外信息,则不能使用具有固定属性列表的对象

有两种经典方法:

1.创建特定的用户记录 为每个用户创建Firestore文档(或实时数据库节点)。通常使用用户的uid作为Firestore文档/RTDB节点的id

这意味着您需要获取数据库以获取此额外的用户信息,例如

firebase.auth().onAuthStateChanged(function(user){
    if (user) {
        firebase.firestore().collection('users').doc(user.uid).get()
        .then(...)
    }
    //...
}
 
2.使用自定义声明 如果您只需要在中存储数量有限的额外信息以提供访问控制,您可以使用。这尤其适用于存储用户角色,例如付费用户

自定义用户声明可以通过用户的身份验证令牌访问,因此您可以使用它们根据用户的角色或访问级别修改客户端UI。请参阅文档中的更多详细信息


要在前端获取索赔,您可以执行以下操作:

firebase.auth().onAuthStateChanged(function (user) {
    if (user) {
        user.getIdTokenResult()
            .then((idTokenResult) => {
                // Confirm the user is a paid user.
                if (!!idTokenResult.claims.paidUser) {
                    // Show admin UI.
                    showPaidUserUI();
                } else {
                    // Show regular user UI.
                    showRegularUI();
                }
            })
            .catch((error) => {
                console.log(error);
            });
    }
    //...
}

请务必注意文档中的以下部分:

自定义声明仅用于提供访问控制。它们不是 设计用于存储附加数据(如配置文件和其他自定义数据 数据)。虽然这似乎是一种方便的机制,但事实并非如此 强烈反对,因为这些声明存储在ID令牌和 可能会导致性能问题,因为所有经过身份验证的请求 始终包含对应于已登录的Firebase ID令牌 用户

  • 使用自定义声明存储数据仅用于控制用户访问。所有其他数据应通过实时数据库单独存储 或其他服务器端存储
  • 定制索赔的规模有限。传递大于1000字节的自定义声明负载将抛出错误

如果要向用户帐户添加一些额外信息,则不能使用具有固定属性列表的对象

有两种经典方法:

1.创建特定的用户记录 为每个用户创建Firestore文档(或实时数据库节点)。通常使用用户的uid作为Firestore文档/RTDB节点的id

这意味着您需要获取数据库以获取此额外的用户信息,例如

firebase.auth().onAuthStateChanged(function(user){
    if (user) {
        firebase.firestore().collection('users').doc(user.uid).get()
        .then(...)
    }
    //...
}
 
2.使用自定义声明 如果您只需要在中存储数量有限的额外信息以提供访问控制,您可以使用。这尤其适用于存储用户角色,例如付费用户

自定义用户声明可以通过用户的身份验证令牌访问,因此您可以使用它们根据用户的角色或访问级别修改客户端UI。请参阅文档中的更多详细信息


要在前端获取索赔,您可以执行以下操作:

firebase.auth().onAuthStateChanged(function (user) {
    if (user) {
        user.getIdTokenResult()
            .then((idTokenResult) => {
                // Confirm the user is a paid user.
                if (!!idTokenResult.claims.paidUser) {
                    // Show admin UI.
                    showPaidUserUI();
                } else {
                    // Show regular user UI.
                    showRegularUI();
                }
            })
            .catch((error) => {
                console.log(error);
            });
    }
    //...
}

请务必注意文档中的以下部分:

自定义声明仅用于提供访问控制。它们不是 设计用于存储附加数据(如配置文件和其他自定义数据 数据)。虽然这似乎是一种方便的机制,但事实并非如此 强烈反对,因为这些声明存储在ID令牌和 可能会导致性能问题,因为所有经过身份验证的请求 始终包含对应于已登录的Firebase ID令牌 用户

  • 使用自定义声明存储数据仅用于控制用户访问。所有其他数据应通过实时数据库单独存储 或其他服务器端存储
  • 定制索赔的规模有限。传递大于1000字节的自定义声明负载将抛出错误

谢谢第一个是显而易见的,我需要一些第二行的东西。在阅读了you链接之后,我还不确定我是否得到了一些东西——我可以更改OnAuthStateState上的那些字段吗?如果我与付费用户打交道,我希望有一个系统能立即返回给我,在用户对象中有点小的DB。自定义声明似乎只是提供了另一个DB,我必须在页面加载时读取它。是的,我忘记了为#2添加此部分。给我5分钟!非常感谢。这很有帮助。虽然看起来我仍然需要自己检索这些数据,但它不像onAuthStateChanged那样是自动的。谢谢!第一个是显而易见的,我需要一些第二行的东西。在阅读了you链接之后,我还不确定我是否得到了一些东西——我可以更改OnAuthStateState上的那些字段吗?如果我与付费用户打交道,我希望有一个系统能立即返回给我,在用户对象中有点小的DB。自定义声明似乎只是提供了另一个DB,我必须在页面加载时读取它。是的,我忘记了为#2添加此部分。给我5分钟!非常感谢。这很有帮助。虽然看起来我仍然需要自己检索这些数据,但它不像onAuthStateChanged那样是自动的。