【问题标题】:Express JWT Permissions: How to set a permission? [closed]Express JWT 权限:如何设置权限? [关闭]
【发布时间】:2017-11-02 18:30:17
【问题描述】:

我正在阅读Express JWT Permissions 的文档,但不明白如何将当前用户的权限保存在令牌中。我只看到如何检查已经设置的权限。

任何人都可以发布设置权限的示例吗?例如假设我们刚刚对用户进行了身份验证,我们想给他一个管理员权限。

【问题讨论】:

    标签: javascript node.js express permissions jwt


    【解决方案1】:

    您应该将“权限”属性添加到 JWT 有效负载中,作为用户拥有的所有权限的数组:

    import * as jwt from 'jsonwebtoken';
    
    public static authenticate(req: Request, res: Response, next: NextFunction) {
      const payload = {
        name: 'John',
        surname: 'Smith',
        username: 'john.smith',
        permissions: ['USER', 'ADMIN'],
      };
      const options = {
        expiresIn: Number(process.env.JWT_TTL),
      };
      const token = jwt.sign(payload, process.env.JWT_SECRET, options);
      res.status(201).send({ token });
    }
    

    稍后,当用户将使用授权令牌发送请求时,您应该使用 express-jwt-permission lib 来检查用户是否具有正确的权限:

    const guard = require("express-jwt-permissions")();
    
    // all user routes
    this.routes.use('/api', guard.check('USER'));
    // ...
    
    // all admin routes
    this.routes.use('/api/admin/', guard.check('ADMIN'));
    // ...
    

    【讨论】:

      【解决方案2】:

      这不是那个库的问题。设置令牌值不是任何 jwt-permissions 库的一部分,它们假定您在执行中间件时设置了正确的值。

      这是一个如何在令牌中设置值的示例

      import * as jwt from 'jsonwebtoken';
      const router = Router();
      router.get('/api/v1/token', (req: Request, res: Response, next: NextFunction) => {
          const token = jwt.sign({ someData: 'foobar' }, config.getJwtSecret());
          res.json({ token: token });
      });
      

      该代码是从我的公开node seed project 中提取的,请看一下。

      【讨论】:

        猜你喜欢
        • 2020-08-03
        • 1970-01-01
        • 1970-01-01
        • 2013-06-10
        • 2011-03-07
        • 1970-01-01
        • 2016-09-11
        • 2016-08-12
        • 2018-12-06
        相关资源
        最近更新 更多