向注册用户Firebase添加额外信息

时间:2020-02-01 14:03:11

标签: reactjs firebase firebase-authentication

我想在React Native中创建一个允许在两种模式下工作的应用程序,父模式和子模式。初始阶段是向Firebase注册,然后添加有关角色(父/子)的其他信息,同时注册子代和父代,并在登录它们两者后,子代将共享位置,父代将收到位置。

我想在React Native + Firebase的应用程序中添加其他字段,例如角色(父/子),以便稍后基于角色创建应用程序的其他功能。

注册:

firebase
    .auth()
    .createUserWithEmailAndPassword(email, password)
    .then(userCredentials => {
        return userCredentials
            .user.updateProfile({
                displayName: name,
            })
            .additionalUserInfo.profile = {
            role: role,
        }
    })

主屏幕

const { displayName } = firebase.auth().currentUser;
const { role } = firebase.additionalUserInfo.profile;

this.setState({displayName, role});

并且角色返回未定义。

1 个答案:

答案 0 :(得分:2)

您可以存储在用户配置文件中的属性由Firebase身份验证定义。您不能随便添加其他合适的属性。最好的情况是,Firebase只会忽略这些内容,但有可能还会明确拒绝它们(引发错误)。

如果要存储有关用户的其他信息,则有两个主要选项:

  1. 将其他信息作为自定义声明存储在用户的身份验证令牌中。
  2. 将其他信息存储在外部数据库中,例如Firebase的Firestore和实时数据库。

虽然将数据存储为自定义声明与您要完成的目标非常接近,但您需要牢记以下几点:

  • 自定义声明用于授权目的,因此只能在受信任的环境(例如您的开发计算机,您控制的服务器或Cloud Functions)中设置。因此,您不能简单地在应用程序内设置role,并且需要一个单独的过程来添加该声明。
  • 在用户个人资料上设置自定义声明后,最多可能需要一个小时才能在客户端看到该更改。如果需要更快,则可以强制用户再次登录或刷新其ID令牌。
  • 自定义声明随您对Firebase资源的每个请求一起发送,因此大小非常有限。用户的自定义声明的最大大小为1000字节。尽管您当前的role可以轻松满足要求,但可能会限制您以后添加的内容。

相反,如果您将用户数据存储在外部数据库中,则通常会将其与有关该用户的其他信息合并到一个users节点/集合中。在此处,您将根据该用户的UID,然后是其个人资料信息,为每个用户存储一个文档/节点。

类似这样:

users: {
  uidOfAleksandra: {
    username: "Aleksandra",
    displayName: "Aleksandra Lastname",
    role: "parent",
    registrationDate: "2020-02-01"
  },
  uidOfPuf: {
    username: "puf",
    displayName: "Frank van Puffelen",
    role: "child",
    registrationDate: "2015-03-07"
  },
}

拥有此用户配置文件列表不仅可以让您存储每个用户的其他信息,而且还可以让您从应用程序内查询该用户列表,而Authentication API不允许在内部进行此操作应用程序代码。