Firebase身份验证内置身份

时间:2019-11-02 19:29:08

标签: javascript firebase firebase-authentication

我正在构建一个Web平台,以使用Firebase Auth和Firestore将学习者与导师联系起来。我将学习者的用户信息存储在Firestore集合中,并将辅导者的信息存储在另一个集合中。我正在构建一个函数,该函数可以在登录时检测客户端是学习者还是导师。

我在想的一种解决方案是查询使用UID在哪个集合中找到用户。虽然,这是一个潜在的解决方案。但这听起来需要大量交易,而且如果收藏数量庞大,可能会花费很长时间。我还有什么可以做的吗?我想知道我是否可以使用身份验证为每个用户建立嵌入式身份,以区分“教师”和“学习者”?因此,每次用户登录时,我们都会立即知道身份?

我知道在解码的身份验证令牌中,有这样的信息:

{ iss: 'https://securetoken.google.com/xxxx',
aud: 'xxxx',
auth_time: 1569886929,
user_id: 'aB03',
sub: 'aB03',
iat: 1570582588,
exp: 1570586188,
email: 'aa@gmail.com',
email_verified: false,
firebase:
{ identities: { email: [Array] }, sign_in_provider: 'password' },
uid: 'aa3' }

我可以利用其中之一来构建自己想要的东西吗?

真的很感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:1)

由于您提到“集合”,因此我假设您正在使用Firestore。在这种情况下:集合的大小不会影响查询性能。无论集合中有1,000个用户文档,即1,000,000甚至1,000,000,000个用户文档,查询单个用户文档所花费的时间将始终相同。


除此之外,您还可以将用户的类型存储在ID令牌中(这是您在问题中显示的内容)。这就是所谓的“自定义声明”,因为您要为信息添加应用的自定义属性。您将要在受信任的环境(您的开发机器,您控制的服务器或Cloud Functions)中执行此操作,因为我假设用户不应更改自己的角色。有关更多信息,请参见controlling access with custom claims上的文档。