nestjs中jwt认证成功后后续接口怎么获取jwt的payload

看了很多博客每个都写的jwt的认证却没有写怎么获取payload中的内容
请教一下如何获取payload中的内容呢
help

阅读 4.6k
2 个回答

JWT是由三段信息构成的,每段之间用 “.” 分隔。第一部分是 token 描述信息,第三部分是加密的签证,中间部分就是载荷(payload)了。
第一部分和第二部分,都是一个简单的 JSON 对象,用 base64 编码,所以可以很简单的根据 “.” 把这个 jwt 分成三份,取出第二份,用 base64 解码,得到载荷 JSON。

import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const AuthUser = createParamDecorator(
  (data: string, ctx: ExecutionContext) => {
    const req = ctx.switchToHttp().getRequest();
    const user = req.user;
    return data ? user?.[data] : user;
});

新建一个user.decorator.ts, 放入上面的代码,你可以把这个文件放到user module里
需要用的时候,像提取query参数那么样 @AuthUser('email') email: string
上面引号里的email,你替换成任意你放在payload里的东西,如果你想拿整个payload,就括号里面什么都不写,外面写个payload
这个方法只能用在校验jwt的api上,因为只有校验jwt,才会从payload里取值并放在req.user里

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进