NestJS / NodeJS / Passport / JWT - 股票当前用户

NestJS / NodeJS / Passport / JWT - Stock current user

我有一个由 JWT 保护的 NestJS 后端。 我想知道存储实际用户的最佳方式或将其传递给我的服务的最佳方式是什么?

我有一个 JwtAuthGuard

@Injectable()
export class JwtAuthGuard extends AuthGuard( 'jwt' ) {
  canActivate(context: ExecutionContext) {
    return super.canActivate( context );
  }

  handleRequest(err, user, info) {
    if ( err || !user ) {
      throw err || new UnauthorizedException();
    }
    return user;
  }
}

我的实际用户 ID 在 handleRequest 中的用户 var 中,但我不知道从哪里 "stock" 才能在某些模块中访问它。 有谁能帮帮我吗?

谢谢

JWT 本身是您存储用户 ID(或用户的任何识别详细信息)的地方。

如果您使用用户 ID ({ id: 123, ... }) 创建 JWT 负载,护照会将 user 成员设置为 request 对象。

Important: Don't store sensitive data in the JWT.

  @AuthGuard( 'jwt' )
  @Get('profile')
  getUserId(@Request() req: any) {
    return req.user.id;
  }

您可以根据需要将 req.user.id 传递给服务。

参见:https://docs.nestjs.com/techniques/authentication#implement-protected-route-and-jwt-strategy-guards


最后一件事: 如果你喜欢请求对象的类型,你可以这样做

import { Request as HttpRequest } from 'express';


interface UserJwtPayload {
  id: string,
}
type AuthRequest = HttpRequest & { user: UserJwtPayload }