typescript - NestJs JWT-autentisering returnerar 401
Jag har implementerat en JWT-autentisering i NestJs. Men varje gång jag försöker autentisera med följande auktoriseringshuvuden:
Bearer <token> or JWT <token>
Jag fick 401. Det här är mina autentiseringsfiler
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
constructor(private readonly authService: AuthService) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: `${process.env.SECRET}`,
});
}
async validate(payload: Credentials) {
const user: Account = await this.authService.validateAccount(payload);
if (!user) {
throw new UnauthorizedException();
}
return user;
}
}
@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;
}
}
och detta är min autentiseringsmodul
@Module({
imports: [
PassportModule.register({ defaultStrategy: 'jwt' }),
JwtModule.register({
secretOrPrivateKey: `${process.env.SECRET}`,
}),
AccountModule,
],
providers: [AuthService, JwtStrategy],
controllers: [AuthController],
exports: [PassportModule, AuthService],
})
export class AuthModule {
}
Svar #1
Validate anropas bara när du skickar en giltig JWT-token. När token signeras med en annan hemlighet eller har gått ut, kommer validate aldrig att anropas. Se till att du har en giltig token. Du kan till exempel kontrollera din token med jwt-felsökningen.
Svar #2
Jag stötte på ett liknande problem, nestjs passport jwt-modulen fungerade perfekt på min lokala dator men fungerade inte på live-servern. Efter att ha forskat i en halv dag upptäckte jag att min token-header inte nådde live-servern, anledningen till detta är att jag använder nginx (proxy_pass) på live-servern och mitt header-fältnamn var "access_token", så av någon anledning tog nginx bort det.
Gör en enkel global mellanprogramvara och kontrollera om du tar emot token i headern.
Hoppas att det hjälper någon.