首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Nestjs中获取登录用户的属性

在Nestjs中获取登录用户的属性,可以通过使用Passport.js和JWT(JSON Web Token)来实现身份验证和用户属性的获取。

首先,确保已经安装了必要的依赖包,包括@nestjs/passportpassportpassport-jwtjsonwebtoken。可以使用以下命令进行安装:

代码语言:txt
复制
npm install @nestjs/passport passport passport-jwt jsonwebtoken

接下来,需要创建一个AuthGuard守卫,用于验证用户的身份和权限。可以创建一个auth.guard.ts文件,并添加以下代码:

代码语言:txt
复制
import { Injectable, ExecutionContext } from '@nestjs/common';
import { AuthGuard as NestAuthGuard } from '@nestjs/passport';

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

然后,在主模块(通常是app.module.ts)中注册PassportModule和配置JWT策略。可以在app.module.ts文件中添加以下代码:

代码语言:txt
复制
import { Module } from '@nestjs/common';
import { PassportModule } from '@nestjs/passport';
import { JwtModule } from '@nestjs/jwt';
import { AuthService } from './auth.service';
import { JwtStrategy } from './jwt.strategy';
import { UserController } from './user.controller';

@Module({
  imports: [
    PassportModule.register({ defaultStrategy: 'jwt' }),
    JwtModule.register({
      secret: 'your-secret-key',
      signOptions: { expiresIn: '1h' },
    }),
  ],
  controllers: [UserController],
  providers: [AuthService, JwtStrategy],
})
export class AppModule {}

在上述代码中,JwtModule用于配置JWT的密钥和过期时间。请确保将your-secret-key替换为实际的密钥。

接下来,需要创建一个JwtStrategy策略,用于验证JWT并提取用户属性。可以创建一个jwt.strategy.ts文件,并添加以下代码:

代码语言:txt
复制
import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { Strategy, ExtractJwt } from 'passport-jwt';
import { AuthService } from './auth.service';

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor(private readonly authService: AuthService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      ignoreExpiration: false,
      secretOrKey: 'your-secret-key',
    });
  }

  async validate(payload: any) {
    return this.authService.validateUser(payload); // 根据实际情况修改此处的验证逻辑
  }
}

在上述代码中,jwtFromRequest用于从请求的Bearer Token中提取JWT。同样,请确保将your-secret-key替换为实际的密钥。

最后,在需要获取登录用户属性的控制器或服务中,可以使用@UseGuards(AuthGuard)装饰器来保护路由,并通过@Req() request参数获取登录用户的属性。例如:

代码语言:txt
复制
import { Controller, Get, UseGuards, Req } from '@nestjs/common';
import { AuthGuard } from './auth.guard';

@Controller('users')
export class UserController {
  @Get('profile')
  @UseGuards(AuthGuard)
  getProfile(@Req() request) {
    return request.user;
  }
}

在上述代码中,@UseGuards(AuthGuard)装饰器用于保护getProfile路由,确保只有经过身份验证的用户才能访问。@Req() request参数用于获取请求对象,其中的user属性即为登录用户的属性。

以上就是在Nestjs中获取登录用户属性的基本步骤。关于Nestjs的更多信息和使用方法,可以参考腾讯云的Nestjs产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

1分27秒

3、hhdesk许可更新指导

1时29分

企业出海秘籍:如何以「稳定」产品提升留存,以AIGC「创新」实现全球增长?

-

苹果ios新隐私政策引发Facebook抨击

36秒

PS使用教程:如何在Mac版Photoshop中画出对称的图案?

2分33秒

SuperEdge易学易用系列-如何借助tunnel登录和运维边缘节点

12分40秒

13分钟详解Linux上安装Vim插件—YouCompleteMe:文本编辑更强大和清爽

1分55秒

uos下升级hhdesk

22秒

PS使用教程:如何在Mac版Photoshop中新建A4纸?

1分1秒

VC++6.0开发的PACS医学影像工作站 DICOM标准化开发(

2分7秒

基于深度强化学习的机械臂位置感知抓取任务

26分40秒

晓兵技术杂谈2-intel_daos用户态文件系统io路径_dfuse_io全路径_io栈_c语言

3.4K
2分29秒

基于实时模型强化学习的无人机自主导航

领券