在Nestjs中获取登录用户的属性,可以通过使用Passport.js和JWT(JSON Web Token)来实现身份验证和用户属性的获取。
首先,确保已经安装了必要的依赖包,包括@nestjs/passport
、passport
、passport-jwt
和jsonwebtoken
。可以使用以下命令进行安装:
npm install @nestjs/passport passport passport-jwt jsonwebtoken
接下来,需要创建一个AuthGuard
守卫,用于验证用户的身份和权限。可以创建一个auth.guard.ts
文件,并添加以下代码:
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
文件中添加以下代码:
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
文件,并添加以下代码:
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
参数获取登录用户的属性。例如:
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产品介绍。
领取专属 10元无门槛券
手把手带您无忧上云