通过 express req 参数传递解码的 jwt 数据是个好主意吗?
Is a good idea pass decoded jwt data via express req parameters?
在我的 NodeJs 应用程序中,我使用 jwt 来管理用户会话,在我存储 user_role 和 user_id 的 jwt 令牌中。这是我的路线:
routes.post('/manga/post', Authorize("Scan"), MangaMiddleware.valid_manga_store, MangaController.store);
在中间件 Authorize("Scan") 中,我使用“jwt.verify”验证 jwt 令牌,如果它有效,我将检查是否有具有令牌 ID 的活动用户以及他的权限是否允许他访问这条路线,如果是这样我使用 next()
在 MangaController.store 我要保存一个新漫画,我需要在文档中保存提出请求的 user_id。
这就是我的意思,我已经解码了授权中间件中的令牌,但解码后的数据不会保留在中间件之外。要从 MangaController 访问 user_id,我必须再次验证令牌。
我想我应该避免验证同一个令牌两次,所以在中间件授权中验证我在 req.auth 中保存 user_id (加密)并在控制器中使用它之后,我正在设置 req.auth = null。这样 user_id 会在 req.auth 中存储一小段时间。
req.auth = user_id //after encrypting
我的朋友告诉我,在请求参数中存储解码数据是个坏主意,但我不认为这是坏事。
简而言之。 我需要验证令牌两次吗?还有另一种方法来检索这些数据吗?在请求参数中存储解码数据是不是很糟糕?非常感谢你的时间和帮助。
验证和解码 JWT 是两件不同的事情。当您验证时,它正在检查其完整性,即确保它没有被篡改,而解码 JWT 意味着从 base64 转换为可读格式(UTF-8?)。所以不用验证两次。
假设您在 headers 中将令牌发送为 "token":"base64encodedJwt"
,那么在验证成功后,只要您需要 user_id,您就可以简单地解码 JWT。使用一些 JWT 解码库。
let token = req.get('token') || req.headers['token'];
let payload = decodeJWT(token);
let userId = payload.user_id;
如果您不将其存储在 req
object 中,则每次需要时都必须对其进行解码。所以 req.auth = userId
应该没问题。
在我的 NodeJs 应用程序中,我使用 jwt 来管理用户会话,在我存储 user_role 和 user_id 的 jwt 令牌中。这是我的路线:
routes.post('/manga/post', Authorize("Scan"), MangaMiddleware.valid_manga_store, MangaController.store);
在中间件 Authorize("Scan") 中,我使用“jwt.verify”验证 jwt 令牌,如果它有效,我将检查是否有具有令牌 ID 的活动用户以及他的权限是否允许他访问这条路线,如果是这样我使用 next()
在 MangaController.store 我要保存一个新漫画,我需要在文档中保存提出请求的 user_id。
这就是我的意思,我已经解码了授权中间件中的令牌,但解码后的数据不会保留在中间件之外。要从 MangaController 访问 user_id,我必须再次验证令牌。
我想我应该避免验证同一个令牌两次,所以在中间件授权中验证我在 req.auth 中保存 user_id (加密)并在控制器中使用它之后,我正在设置 req.auth = null。这样 user_id 会在 req.auth 中存储一小段时间。
req.auth = user_id //after encrypting
我的朋友告诉我,在请求参数中存储解码数据是个坏主意,但我不认为这是坏事。
简而言之。 我需要验证令牌两次吗?还有另一种方法来检索这些数据吗?在请求参数中存储解码数据是不是很糟糕?非常感谢你的时间和帮助。
验证和解码 JWT 是两件不同的事情。当您验证时,它正在检查其完整性,即确保它没有被篡改,而解码 JWT 意味着从 base64 转换为可读格式(UTF-8?)。所以不用验证两次。
假设您在 headers 中将令牌发送为 "token":"base64encodedJwt"
,那么在验证成功后,只要您需要 user_id,您就可以简单地解码 JWT。使用一些 JWT 解码库。
let token = req.get('token') || req.headers['token'];
let payload = decodeJWT(token);
let userId = payload.user_id;
如果您不将其存储在 req
object 中,则每次需要时都必须对其进行解码。所以 req.auth = userId
应该没问题。