28 lines
843 B
TypeScript
28 lines
843 B
TypeScript
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
|
|
import { Observable } from 'rxjs';
|
|
import { JwtService } from '@nestjs/jwt';
|
|
|
|
@Injectable()
|
|
export class JwtAuthGuard implements CanActivate {
|
|
constructor(private jwtService: JwtService) {}
|
|
|
|
canActivate(context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean> {
|
|
const request = context.switchToHttp().getRequest();
|
|
try {
|
|
const token = this.extractToken(request);
|
|
if (!token) return false;
|
|
|
|
const payload = this.jwtService.verify(token);
|
|
request.user = payload;
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private extractToken(request): string | null {
|
|
return request.cookies?.access_token ||
|
|
request.headers.authorization?.split(' ')[1] ||
|
|
null;
|
|
}
|
|
} |