Node.js 通过express req参数传递解码的jwt数据是个好主意吗?

Node.js 通过express req参数传递解码的jwt数据是个好主意吗?,node.js,express,model-view-controller,jwt,middleware,Node.js,Express,Model View Controller,Jwt,Middleware,在我的NodeJs应用程序中,我使用jwt管理用户会话,在jwt令牌中存储用户角色和用户id。这是我的路线: routes.post('/manga/post', Authorize("Scan"), MangaMiddleware.valid_manga_store, MangaController.store); 在中间件授权(“扫描”)中,我用“jwt.verify”验证jwt令牌,如果它有效,我将检查是否有一个具有令牌id的活动用户,以及他的权限是否允许他访问此

在我的NodeJs应用程序中,我使用jwt管理用户会话,在jwt令牌中存储用户角色和用户id。这是我的路线:

 routes.post('/manga/post', Authorize("Scan"), MangaMiddleware.valid_manga_store, MangaController.store);

在中间件授权(“扫描”)中,我用“jwt.verify”验证jwt令牌,如果它有效,我将检查是否有一个具有令牌id的活动用户,以及他的权限是否允许他访问此路由,如果是,我使用next()

在MangaController.store中,我将保存一个新的漫画,我需要在文档中保存发出请求的用户id

这就是我的观点,我已经在Authorize中间件中解码了令牌,但是解码后的数据不会持久存在于中间件之外。要从MangaController访问用户id,我必须再次验证令牌

我想我应该避免两次验证同一令牌,因此在中间件Authorize中,在验证后,我将用户id(加密)保存在req.auth中,在控制器中使用后,我将req.auth设置为null。这样,用户id将在req.auth中存储一小段时间

req.auth=user\u id//加密后

我的朋友告诉我,将解码后的数据存储在req参数中是个坏主意,但我认为这并没有那么糟糕


简而言之我是否需要验证令牌两次?是否有其他方法检索此数据?将解码后的数据存储在req参数中很糟糕?我非常感谢您的时间和帮助。

验证和解码JWT是两件不同的事情。当您验证时,它正在检查其完整性,即确保它没有被篡改,而解码JWT意味着从base64转换为可读格式(UTF-8?)。所以它不需要验证两次

假设您将令牌作为
“token”:“base64encodedJwt”
发送到头中,那么在成功验证后,无论何时需要用户id,您都可以简单地解码JWT。使用一些JWT解码库

    let token = req.get('token') || req.headers['token'];
    let payload = decodeJWT(token);
    let userId = payload.user_id;
如果您没有将其存储在
req
对象中,那么每次需要时都必须对其进行解码。所以
req.auth=userId
应该可以