0

我有一个由 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 的 user var 中,但我不知道在哪里“存储”它以便能够在某些模块中访问它。有人可以帮助我吗?

谢谢

4

1 回答 1

2

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

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

重要提示:不要在 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 }
于 2020-05-11T08:15:03.537 回答