@@ -14,23 +14,26 @@ const THREE_WEEKS_IN_MS = 21 * 24 * 60 * 60 * 1000;
1414export class UserController {
1515 constructor ( private userService : UserService ) { }
1616
17- private cookieOption ( ) : CookieOptions {
17+ /**
18+ * 환경 및 쿠키 삭제 여부에 따라 쿠키 옵션을 생성합니다.
19+ *
20+ * @param isClear - true일 경우 쿠키 삭제용 옵션을 생성합니다. 기본값은 false입니다.
21+ * @returns 현재 환경에 맞게 설정된 CookieOptions 객체를 반환합니다.
22+ */
23+ private cookieOption ( isClear : boolean = false ) : CookieOptions {
1824 const isProd = process . env . NODE_ENV === 'production' ;
19-
20- const baseOptions : CookieOptions = {
25+ const options : CookieOptions = {
2126 httpOnly : isProd ,
2227 secure : isProd ,
28+ sameSite : isProd ? 'lax' : undefined ,
29+ domain : isProd ? 'velog-dashboard.kro.kr' : 'localhost' ,
2330 } ;
2431
25- if ( isProd ) {
26- baseOptions . sameSite = 'lax' ;
27- baseOptions . domain = 'velog-dashboard.kro.kr' ;
28- baseOptions . maxAge = THREE_WEEKS_IN_MS ; // 3주
29- } else {
30- baseOptions . domain = 'localhost' ;
32+ if ( isProd && ! isClear ) {
33+ options . maxAge = THREE_WEEKS_IN_MS ;
3134 }
3235
33- return baseOptions ;
36+ return options ;
3437 }
3538
3639 login : RequestHandler = async ( req : Request , res : Response < LoginResponseDto > , next : NextFunction ) : Promise < void > => {
@@ -43,8 +46,8 @@ export class UserController {
4346 const user = await this . userService . handleUserTokensByVelogUUID ( velogUser , accessToken , refreshToken ) ;
4447
4548 // 3. 로그이 완료 후 쿠키 세팅
46- res . clearCookie ( 'access_token' , this . cookieOption ( ) ) ;
47- res . clearCookie ( 'refresh_token' , this . cookieOption ( ) ) ;
49+ res . clearCookie ( 'access_token' , this . cookieOption ( true ) ) ;
50+ res . clearCookie ( 'refresh_token' , this . cookieOption ( true ) ) ;
4851
4952 res . cookie ( 'access_token' , accessToken , this . cookieOption ( ) ) ;
5053 res . cookie ( 'refresh_token' , refreshToken , this . cookieOption ( ) ) ;
@@ -71,8 +74,8 @@ export class UserController {
7174 try {
7275 const sampleUser = await this . userService . findSampleUser ( ) ;
7376
74- res . clearCookie ( 'access_token' , this . cookieOption ( ) ) ;
75- res . clearCookie ( 'refresh_token' , this . cookieOption ( ) ) ;
77+ res . clearCookie ( 'access_token' , this . cookieOption ( true ) ) ;
78+ res . clearCookie ( 'refresh_token' , this . cookieOption ( true ) ) ;
7679
7780 res . cookie ( 'access_token' , sampleUser . decryptedAccessToken , this . cookieOption ( ) ) ;
7881 res . cookie ( 'refresh_token' , sampleUser . decryptedRefreshToken , this . cookieOption ( ) ) ;
@@ -98,8 +101,8 @@ export class UserController {
98101 } ;
99102
100103 logout : RequestHandler = async ( req : Request , res : Response < EmptyResponseDto > ) => {
101- res . clearCookie ( 'access_token' , this . cookieOption ( ) ) ;
102- res . clearCookie ( 'refresh_token' , this . cookieOption ( ) ) ;
104+ res . clearCookie ( 'access_token' , this . cookieOption ( true ) ) ;
105+ res . clearCookie ( 'refresh_token' , this . cookieOption ( true ) ) ;
103106
104107 const response = new EmptyResponseDto ( true , '로그아웃에 성공하였습니다.' , { } , null ) ;
105108
@@ -155,8 +158,8 @@ export class UserController {
155158 throw new QRTokenExpiredError ( ) ;
156159 }
157160
158- res . clearCookie ( 'access_token' , this . cookieOption ( ) ) ;
159- res . clearCookie ( 'refresh_token' , this . cookieOption ( ) ) ;
161+ res . clearCookie ( 'access_token' , this . cookieOption ( true ) ) ;
162+ res . clearCookie ( 'refresh_token' , this . cookieOption ( true ) ) ;
160163
161164 res . cookie ( 'access_token' , userLoginToken . decryptedAccessToken , this . cookieOption ( ) ) ;
162165 res . cookie ( 'refresh_token' , userLoginToken . decryptedRefreshToken , this . cookieOption ( ) ) ;
0 commit comments