Express JWT Permissions:如何设置权限?

时间:2017-06-01 14:33:26

标签: javascript node.js express permissions jwt

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

有人可以发布一个设置权限的示例吗?例如让我们说我们只是验证了用户,我们想给他一个管理员权限。

2 个答案:

答案 0 :(得分:3)

您应该添加"权限"属于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'));
// ...

答案 1 :(得分:0)

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

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

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中提取的,请查看。