我找不到适用于Expressjs的完整用户身份验证系统,所以我写了这个。
对于不耐烦的人,代码位于Github 。
MySQL的
它使用MySql来存储用户数据,也用作会话存储。 我试图使代码灵活。 将MySql更改为其他内容很容易。
会话存储不需要使用相同的数据库系统。 我这样做只是为了简单起见。
组态
它使用.env文件进行应用程序的基本配置。 也就是说,仅编辑.env即可启动并运行应用程序。
此外,/ config目录中还有一些可配置的参数。
“记住我” cookie的持续时间。
会话存储,会话持续时间。
电子邮件发送配置。

认证方式
认证系统包括:
1.用户注册,基于护照登录。
2.忘记了-重置密码功能。
默认情况下,重置密码代码的有效期为1小时。 可配置的。
3.“记住我” cookie。
默认情况下有效期为360天。 可配置的。
4.两个用户级别,普通和管理员。 不可配置。
通过一些编码,可以轻松扩展到更多级别。
5.对DOS攻击的节流保护。 可配置的。
默认情况下,每两秒钟允许两个请求。
6. Xsrf保护。
接口
该界面摘自Brad Traversy的演示文稿 。 我只更改了我必须要做的部分。
我相信,根据项目要求,很容易将接口切换为另一个接口。
注册
当用户在应用程序中注册后,如果数据库中没有其他用户,则他将成为管理员。
没有激活电子邮件。 注册后用户立即处于活动状态。 我没有包括激活步骤,因为并非所有项目都需要它。 如果有此要求,添加它非常容易。
无论如何,总有管理员来控制允许哪些用户,哪些不允许。
仪表板

有一个基本的管理员控制台,管理员可以在其中创建或取消其他管理员。
管理员可以激活,停用其他用户。 没有用户删除,只有停用。
记住账号
“记住我” cookie不包含用户ID,但包含UUID,该UUID不包含对攻击者有用的信息。 这是在“用户”数据库表中包括UUID的唯一原因。
Cookie的内容是UUID和“记住我”令牌。 “记住我”令牌哈希存储在数据库中。 令牌已验证
作为密码。
“记住我” cookie值和“忘记密码”键被视为密码,因为它们实际上等同于密码。
依存关系
我试图将依赖项的数量保持在尽可能低的水平,以便不限制开发人员选择主项目的程序包。
From: https://hackernoon.com/express-js-boilerplate-with-user-authentication-ch5032a3