Skip to content

Commit eaba74e

Browse files
fix: 토큰 검증 과정에서 에러 발생시 해당 형식의 쿠키 지워줌
1 parent 31863f6 commit eaba74e

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

apps/backend/src/auth/guards/jwt-auth.guard.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,13 @@ export class JwtAuthGuard implements CanActivate {
6060

6161
return true;
6262
} catch (refreshError) {
63+
// refreshToken 디코딩 실패 시 처리 쿠키 비워줌
64+
this.tokenService.clearCookies(response);
6365
throw new InvalidTokenException();
6466
}
6567
} else {
68+
// accessToken 디코딩(만료가 아닌 이유로) 실패 시 처리 쿠키 비워줌
69+
this.tokenService.clearCookies(response);
6670
throw new InvalidTokenException();
6771
}
6872
}

apps/backend/src/auth/token/token.service.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
import { Injectable } from '@nestjs/common';
22
import { JwtService } from '@nestjs/jwt';
3+
import { Response } from 'express';
4+
5+
const HOUR = 2 * 60 * 60;
6+
const THREE_MONTHS = 3 * 30 * 24 * 60 * 60;
37

48
@Injectable()
59
export class TokenService {
610
constructor(private readonly jwtService: JwtService) {}
711

812
generateAccessToken(payload: any): string {
913
return this.jwtService.sign(payload, {
10-
expiresIn: '1h',
14+
expiresIn: HOUR,
1115
});
1216
}
1317

1418
generateRefreshToken(payload: any): string {
1519
return this.jwtService.sign(payload, {
16-
expiresIn: '28d',
20+
expiresIn: THREE_MONTHS,
1721
});
1822
}
1923

24+
// 후에 DB 로직 (지금은 refreshToken이 DB로 관리 X)
25+
// 추가될 때를 위해 일단 비동기 선언
2026
async refreshAccessToken(refreshToken: string): Promise<string> {
2127
try {
2228
// refreshToken을 검증한다
@@ -30,4 +36,17 @@ export class TokenService {
3036
throw new Error('Invalid refresh token');
3137
}
3238
}
39+
40+
clearCookies(response: Response) {
41+
response.clearCookie('accessToken', {
42+
httpOnly: true,
43+
secure: true,
44+
sameSite: 'strict',
45+
});
46+
response.clearCookie('refreshToken', {
47+
httpOnly: true,
48+
secure: true,
49+
sameSite: 'strict',
50+
});
51+
}
3352
}

0 commit comments

Comments
 (0)