Але*_*ьёв 2 jwt typescript nestjs
JwtAuthGuard 我在其中验证标头中的令牌:
import { JwtService } from '@nestjs/jwt';
import {
CanActivate,
ExecutionContext,
UnauthorizedException
} from '@nestjs/common';
import { Observable } from 'rxjs';
export class JwtAuthGuard implements CanActivate {
constructor(private jwtService: JwtService) {}
canActivate(
context: ExecutionContext
): boolean | Promise<boolean> | Observable<boolean> {
const req = context.switchToHttp().getRequest();
try {
const authHeader = req.headers.authorization;
const token = authHeader.split(' ')[1];
const user = this.jwtService.verify(token);
req.user = user;
return true;
} catch (error) {
console.log(error);
throw new UnauthorizedException();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器:
import { Controller, Get, UseGuards } from '@nestjs/common';
import { JwtAuthGuard } from 'src/auth/jwt-auth.guard';
@Controller('api/messages')
export class MessagesController {
@UseGuards(JwtAuthGuard)
@Get()
getAllUserMessages() {
return "it's work";
}
}
Run Code Online (Sandbox Code Playgroud)
我在其中注册 JWT 的 AuthModule:
import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';
import { UsersModule } from 'src/users/users.module';
import { JwtModule } from '@nestjs/jwt';
import { ConfigService } from '@nestjs/config';
@Module({
providers: [AuthService],
controllers: [AuthController],
imports: [
UsersModule,
JwtModule.registerAsync({
useFactory: async (configService: ConfigService) => ({
secret: configService.get('AUTH_KEY'),
signOptions: {
expiresIn: '12h'
}
}),
inject: [ConfigService]
})
],
exports: [JwtModule, AuthService]
})
export class AuthModule {}
Run Code Online (Sandbox Code Playgroud)
当我使用令牌去路由时/api/messages,出现错误:
TypeError: Cannot read property 'verify' of undefined
at JwtAuthGuard.canActivate (/Users/alexander/Projects/nest/paska/dist/auth/jwt-auth.guard.js:18:42)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1349 次 |
| 最近记录: |