管理员注册节点

时间:2018-07-14 17:56:38

标签: node.js mongodb express mongoose

我正在使用node构建博客API。身份验证将使用具有两个角色的JWT:admin和user。

我的问题是我应该使用哪种方法来确保只有一个管理员可以在数据库中注册?

我当时正在考虑使用以下方法: 将“ admin”注册为用户名的第一个用户将是admin,并且所有admin特权都将授予该用户。在注册和随后的登录时,将向该用户授予令牌,该令牌的角色设置为有效负载中的admin。

如果另一个用户尝试向admin注册,则该操作将不起作用,因为数据库将查找admin并拒绝再次使用该用户名重新注册用户。

这种方法是否合适?或者我是否忽略了任何会导致用户恶意获得管理员特权的缺陷?还有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

在您的情况下,启动应用程序时,我将在启动服务器之前检查数据库中是否存在具有admin角色的用户,是否只是继续运行并启动服务器,否则询问用户名和密码(以及所有其他必需的数据),进行解析并检查数据,如果有效,请添加新管理员,然后启动服务器。这样,您可以确保在服务器运行之前先创建管理员。

答案 1 :(得分:0)

我会再次争论这种方法,因为如果从数据库中删除管理员用户并且服务器重新启动(可能会发生),那么下一个新注册的用户将自动成为管理员。

接下来的事情是管理员状态应该由角色而不是用户名提供。

所以我建议,每个注册都可以创建仅具有user角色的用户,而不能以这种方式创建管理员。

我将使用一些默认的日志凭证在数据库中预设管理员条目,然后允许他/她(或强迫他们)在登录应用程序后更改这些凭证。

但是千万不要赋予注册表格/代码能力(随机)创建新的管理员用户。