【问题标题】:Role Authentication with Express使用 Express 进行角色身份验证
【发布时间】:2020-08-08 17:40:44
【问题描述】:

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

【问题讨论】:

  • 在 POST 路由中,检查权限
  • 第一句很抱歉:我有一个用户的MongoDB,每个用户都有一个名为role的属性,默认情况下设置用户,所以用户对象看起来像这样userxy:{role:'用户'}
  • 好的,但我需要每个人在注册时访问此路线

标签: javascript node.js express authentication passport.js


【解决方案1】:

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

  1. 只有管理员用户才能在 Web 上创建管理员帐户(因为您不想使用默认用户帐户创建它 -> 只需对其他用户隐藏按钮/选项)
  2. 您可以将信息放入 JWT 令牌中(因此您可以在 JWT 中添加 admin-role 以分隔其他人的管理请求或用户名就足够了,您可以在从令牌中获取用户名信息后检查用户的角色并从 mongo 获取角色。 )
  3. 只有管理员才能拥有具有管理员角色的 JWT 令牌。 (JWT 令牌是在用户登录时创建的。您基本上将用户(刚刚登录的那个)信息隐藏到令牌中。)
  4. 放置一个任何人都没有 JWT 令牌(或有但没有管理员角色)不能进入 next() 的中间件。否则返回 403。如果你让他们通过 JWT 令牌,你必须控制用户的角色是函数内部的管理员。

【讨论】:

    【解决方案2】:

    您可以使用 passport.js 轻松做到这一点

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

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

    【讨论】:

      猜你喜欢
      • 2018-05-25
      • 2021-11-19
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      相关资源
      最近更新 更多