使用 Express 进行角色身份验证

Role Authentication with Express

我有MongoDB个用户,每个用户有属性个用户。用户可以注册,并获得默认用户角色,但在管理面板中,您可以创建其他管理员。问题是我不知道如何防止有人刚刚获得创建用户的 POST 路由,并且只是将角色 属性 设置为 admin 和 post 例如使用 Insomnia。任何想法如何防止这种情况?

我能想到的答案是使用 JWT 令牌。不确定如何用 passport.js 做到这一点,但你可以那样做:

  1. 只有管理员用户才能在 Web 上创建管理员帐户(因为您不想使用默认用户帐户创建它 -> 只需对其他用户隐藏 button/option)
  2. 您可以将信息放入 JWT 令牌中(因此您可以在 JWT 中添加 admin-role 以将管理员请求与其他人分开,或者用户名就足够了,您可以在从令牌中获取用户名信息后检查用户的角色并获取来自 mongo 的角色。)
  3. 只有管理员才能拥有 admin-role 的 JWT 令牌。 (JWT 令牌是在用户登录时创建的。您基本上将用户(只是 loged-in)的信息隐藏到令牌中。)
  4. 放置一个任何没有 JWT 令牌(或拥有但不是管理员角色)的中间件都无法进入 next()。否则 return 403.If 你让他们通过 JWT 令牌只有你需要控制用户的角色是否是函数内的管理员。

您可以使用 passport.js

轻松完成

我前段时间为我的一些朋友做了这个例子: https://github.com/rodrigoalviani/superhero

参见 routes.js 文件中的示例! 请注意,在每条路线上,您都可以选择具有访问权限的角色。