fix: 토큰 갱신/로그인 유지(keepLogin) 정상화
세션이 짧게 유지되고 '로그인 유지'가 동작하지 않던 문제 수정. 원인1(프론트): 401 자동 refresh 가 '/auth/' 포함 URL을 모두 제외해, 부트스트랩 /auth/me 가 access 만료(15분)로 401 이어도 refresh 를 시도하지 않아 새로고침/재방문 시 로그아웃됨. - useApi 인터셉터: refresh-재시도 제외 대상을 /auth/refresh·/auth/login 으로만 한정 → /auth/me 등은 access 만료 시 refresh 후 재시도되어 세션 복원 원인2(백엔드): keepLogin 값이 무시되어 쿠키 영속 여부에 반영되지 않음. - RefreshSession 에 persistent 플래그 추가(마이그레이션, default true) - 로그인 시 keepLogin 저장, refresh 회전 시에도 그대로 유지 - setAuthCookies: persistent=true 면 maxAge(영속), false 면 세션 쿠키 - 소셜 로그인은 체크박스가 없어 영속(true) 기본 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
|
||||
// 로그인 유지(keepLogin) — refresh 세션에 persistent 플래그 추가.
|
||||
// true(기본): 영속 쿠키(refresh TTL), false: 세션 쿠키(브라우저 종료 시 만료).
|
||||
// 기존 세션은 기존 동작(영속) 유지를 위해 default true.
|
||||
export class AddRefreshSessionPersistent1782400000000 implements MigrationInterface {
|
||||
name = 'AddRefreshSessionPersistent1782400000000';
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "refresh_sessions" ADD "persistent" boolean NOT NULL DEFAULT true`,
|
||||
);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "refresh_sessions" DROP COLUMN "persistent"`,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user