UNPKG

create-chuntianxiaozhu

Version:

春天小猪模板工具

49 lines (45 loc) 1.33 kB
import { Injectable, CanActivate, ExecutionContext, UnauthorizedException, } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { JwtService } from '@nestjs/jwt'; import { Request } from 'express'; import { IS_PUBLIC_KEY } from 'api/utils/constants'; @Injectable() export class AuthGuard implements CanActivate { constructor( private jwtService: JwtService, private reflector: Reflector, ) {} async canActivate(context: ExecutionContext): Promise<boolean> { const isPublic = this.reflector.getAllAndOverride<boolean>(IS_PUBLIC_KEY, [ context.getHandler(), context.getClass(), ]); if (isPublic) { return true; } const request = context.switchToHttp().getRequest(); const token = this.extractTokenFromHeader(request); if (!token) { throw new UnauthorizedException('未登录'); } try { const payload = await this.jwtService.verifyAsync(token, { secret: process.env.JWT_SECRET, }); request['user'] = payload; } catch { throw new UnauthorizedException('登录已过期'); } return true; } private extractTokenFromHeader(request: Request): string | undefined { const cookies = request.cookies; const headers = request.headers; return cookies.token || headers.token; } }