로그인 유지와 마지막 접속 기록 개선

This commit is contained in:
2026-06-24 09:56:25 +09:00
parent 5a56ddcede
commit edf48e53a5
16 changed files with 72 additions and 21 deletions

View File

@@ -1,5 +1,15 @@
# 변경사항
## v4.0.11
### 로그인 유지 선택
로그인 화면에서 `로그인 유지`를 선택할 수 있습니다. 선택하지 않으면 브라우저 세션이 끝날 때 로그인 정보가 제거됩니다.
### 마지막 접속 기록 개선
이미 로그인된 사용자도 사이트를 다시 이용하면 관리자 화면의 마지막 접속 시간이 갱신됩니다.
## v4.0.3
### 즐겨찾기 계정 동기화

View File

@@ -67,7 +67,7 @@ Docker 실행: `docker compose -f docker-compose.prod.yml up -d --build`
API 확인: `curl -fsS http://localhost:44082/api/v1/health`
정상이면 `{"ok":true,"version":"4.0.3"}`이 표시된다.
정상이면 `{"ok":true,"version":"4.0.11"}`이 표시된다.
NAS 리버스 프록시는 `https://uniare.sori.studio`을 `http://<NAS_IP>:44082`로 연결한다.

View File

@@ -1,5 +1,10 @@
# 의사결정 이력
## 2026-06-24 v4.0.11 — 로그인 유지와 실제 접속 시각을 분리 관리
💡 브라우저 종료 후 로그인 유지 여부는 사용자가 선택하고, 접속 기록은 재로그인 없이도 실제 이용을 반영해야 하기 때문.
🔧 체크 시 로컬 저장소, 미체크 시 세션 저장소를 사용하고 `/auth/me` 성공 시 `last_login_at`을 갱신.
## 2026-06-23 v4.0.10 — 위험한 관리자 변경은 명시적 동작으로 제한
💡 역할 변경은 빈도가 낮고 영향이 커서 상시 노출보다 의도적 진입이 안전하기 때문.

View File

@@ -88,7 +88,7 @@ script/ads.js
```text
관리자·로그인·회원가입
admin.html (회원 2열·덱 공개/전체 통계·마지막 접속·역할 변경 버튼 노출), login.html (비밀번호 분실 메일 안내), signup.html — Tailwind 유틸리티
admin.html (회원 2열·덱 공개/전체 통계·마지막 접속·역할 변경 버튼 노출), login.html (로그인 유지 선택·비밀번호 분실 메일 안내), signup.html — Tailwind 유틸리티
내 덱·공개 덱·프로필
deckHistory.html, preset.html, profile.html — HTML 클래스 + components.css
@@ -110,7 +110,7 @@ api/src/db.js
JWT 인증·권한
api/src/middleware/auth.js
회원가입·로그인·프로필
회원가입·로그인·프로필·인증 세션 접속 시각 갱신
api/src/routes/auth.js
덱 저장·조회·공개 목록

View File

@@ -3,7 +3,7 @@
## 프로젝트 개요
- 서비스명: `UNIARE - Union Arena Deck Builder`
- 현재 버전: `v4.0.4`
- 현재 버전: `v4.0.11`
- 프론트: 정적 HTML, CSS, JavaScript
- 백엔드: Express, SQLite(`better-sqlite3`)
- 운영: Docker Compose 기반 Nginx + API
@@ -78,14 +78,16 @@
| `lang` | 선택 언어 |
| `selectedCards` | 편집 중인 덱 |
| `selectedSeries` | 현재 시리즈 |
| `uadeck_token` | JWT |
| `uadeck_user` | 로그인 사용자 캐시 |
| `uadeck_token` | JWT. 로그인 유지 선택 시 `localStorage`, 미선택 시 `sessionStorage` |
| `uadeck_user` | 로그인 사용자 캐시. 토큰과 같은 저장소 사용 |
| `uadeck.deckFavorites` | 비로그인 즐겨찾기 및 로그인 시 최초 이전 대상 |
## 인증 및 권한
- 비밀번호는 bcrypt 비용 12로 해시한다.
- JWT 기본 만료는 7일이며 `JWT_EXPIRES`로 변경할 수 있다.
- 로그인 유지 선택 시 브라우저를 닫아도 인증 정보를 유지하고, 미선택 시 현재 브라우저 세션에서만 유지한다.
- 인증된 화면 진입 시 `/auth/me` 검증과 함께 `last_login_at`을 갱신한다.
- `user`는 자신의 프로필과 덱만 수정·삭제할 수 있다.
- `admin`은 회원 상태·역할·비밀번호와 전체 덱을 관리할 수 있다.
- 관리자는 자신의 관리자 역할을 해제하거나 자신의 계정을 비활성화할 수 없다.
@@ -120,7 +122,7 @@
| `is_active` | 계정 활성 상태 |
| `default_deck_public` | 덱 저장 기본 공개 여부 |
| `skip_deck_public_prompt` | 저장 시 공개 확인 생략 여부 |
| `last_login_at` | 마지막 로그인 시각 |
| `last_login_at` | 마지막 로그인 또는 인증 세션 확인 시각 |
| `created_at`, `updated_at` | 생성·수정 시각 |
### `decks`
@@ -162,7 +164,7 @@
|---|---|---|---|
| POST | `/api/v1/auth/register` | 공개 | 회원가입 |
| POST | `/api/v1/auth/login` | 공개 | 로그인과 JWT 발급, `last_login_at` 갱신 |
| GET | `/api/v1/auth/me` | 회원 | 내 정보 |
| GET | `/api/v1/auth/me` | 회원 | 내 정보와 인증 세션 확인, `last_login_at` 갱신 |
| PUT | `/api/v1/auth/me` | 회원 | 프로필·덱 저장 설정 변경 |
| POST | `/api/v1/auth/me/password` | 회원 | 비밀번호 변경 |
| GET | `/api/v1/auth/avatar/:userId` | 공개 | PNG 아바타 |

View File

@@ -1,5 +1,14 @@
# 업데이트 이력
## 2026-06-24 / v4.0.11 — 로그인 유지·마지막 접속 갱신 개선
### 수행 작업
- 로그인 화면에 `로그인 유지` 선택 항목 추가
- 선택 시 인증 정보를 `localStorage`, 미선택 시 `sessionStorage`에 저장하도록 분리
- 기존 로그인 유지 사용자의 로컬 인증 정보 호환 유지
- 인증된 사용자의 `/auth/me` 세션 확인 성공 시 `last_login_at` 갱신
- 로그인 유지 문구를 한국어·일본어·영어 번역에 반영
## 2026-06-23 / v4.0.10 — 관리자 권한 변경 안전장치·접속 시간 표시
### 수행 작업