如何与不同的用户组进行注册和登录

时间:2019-01-31 13:14:53

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

我正在为我的大学开发一个应用程序,并且有不同类型的用户,称为学生,教师,大学生 等等。当他们登录时,我怎么知道老师已登录,或学生已登录? Firestore中是否有用于基于角色的注册和登录的功能?

我当时在想,当一名教师注册时,我会在她的uid.username末尾添加一个标签,即如果在注册时用户名是“ DANIEL”,我会为教师添加一个tea和一个{{1} },以学生的名字结尾。

因此,当他们登录时,我将获取uid并进行字符串操作并获取最后三个字母,以便我可以知道谁登录,以便向不同类型的用户显示不同的用户界面

有什么最好的方法吗?

在发布消息时,用户输入其用户名示例:“ daniel” 我将在uid.username中更新该用户名,例如“ daniel-stu”(如果学生已注册),“ daniel-tea”(如果技术人员注册)。

1 个答案:

答案 0 :(得分:2)

可以将此信息存储在用户的显示名称中。您下次可以从那里读回它,并在应用程序的客户端代码中采取措施。但是请注意,这意味着任何用户都可以更改其角色,因为他们还可以向update their profile调用相同的代码。如果您的应用程序不关心此问题,那么这种方法听起来可能行得通。

如果恶意用户不能更改其角色,则不应从客户端应用程序代码中设置该角色。在这种情况下,您可以使用Admin SDK从服务器(或开发计算机或Cloud Functions)设置角色。由于Admin SDK在受信任的环境中运行,因此它具有扩展的特权,并且可以update the profile of any user。因此,Admin SDK可以按照您想到的相同方式来更新用户的显示名称。

但这仍然不安全,因为您仍在设置一个任何人都可以对其自己的个人资料进行修改的属性。再次...如果这对您的应用程序来说没问题,那么很好,但是如果用例要求您可以依赖该属性正确,则我们必须继续寻找其他地方。

Admin SDK可以set additional so-called claims on a user profile修改客户端代码。此类声明涉及影响用户权限的事情,例如,如果用户是管理员,或者用户属于哪个角色/组。这听起来很接近您的描述,因此也可以使用。这次,只有您在受信任的环境中运行的代码才能这样做。

最后,您可以在数据库中存储有关用户的其他信息。在数据库中有一个集合(UsersProfiles)是很常见的,您在其中为每个用户存储一个文档(文档名称为User.uid)。用户首次登录时创建文档,并在需要时进行更新。您可以从客户端代码(如果不需要控制编写的内容)来执行此操作,也可以从在受信任的环境中运行的代码(例如,开发计算机,您控制的服务器或Cloud Functions)中执行此操作确实需要保持控制。这种方法的一大优点是,所有用户都可以看到此集合中的信息,而客户端Authentication SDK仅允许用户读取自己的用户个人资料。

有关此的更多信息,请参见: