首页
学习
活动
专区
工具
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产品介绍

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

相关·内容

没有搜到相关的合辑

领券