forked from MentoNest/SkillSync_Server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjwt.strategy.ts
More file actions
36 lines (34 loc) · 1.14 KB
/
Copy pathjwt.strategy.ts
File metadata and controls
36 lines (34 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { ConfigService } from '@nestjs/config';
import { JwtAccessTokenPayload } from '../interfaces/jwt-payload.interface.js';
/**
* #973-974: JWT strategy for validating Bearer tokens.
* Extracts and verifies JWT from Authorization header.
*/
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(configService: ConfigService) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
ignoreExpiration: false,
secretOrKey: configService.get<string>('JWT_SECRET', 'dev-secret'),
});
}
validate(payload: JwtAccessTokenPayload): JwtAccessTokenPayload {
if (!payload.sub) {
throw new UnauthorizedException('Invalid token payload');
}
return {
sub: payload.sub,
wallet: payload.wallet,
jti: payload.jti,
iat: payload.iat,
exp: payload.exp,
roles: payload.roles || [],
permissions: payload.permissions || [],
status: payload.status,
};
}
}