이메일 인증 재발송과 관리자 승인 개선
This commit is contained in:
@@ -1,5 +1,19 @@
|
||||
# 변경사항
|
||||
|
||||
## v4.0.15
|
||||
|
||||
### 인증 메일 재발송 동선 개선
|
||||
|
||||
이메일 인증을 완료하지 않은 상태로 로그인하면 로그인 화면에서 인증 메일을 바로 다시 요청할 수 있습니다.
|
||||
|
||||
인증·비밀번호 재설정 메일은 최초 발송을 포함해 계정당 월 3회까지 제공되며, 한도 초과 시 관리자 문의 방법을 함께 안내합니다.
|
||||
|
||||
관리자는 문의한 미인증 회원을 확인한 뒤 관리자 화면에서 이메일 인증을 직접 승인할 수 있습니다.
|
||||
|
||||
### 인증·비밀번호 화면 다국어 개선
|
||||
|
||||
인증 완료 안내와 `비밀번호를 잊으셨나요?`, 비밀번호 찾기·재설정 화면을 한국어·일본어·영어로 제공합니다. 별도 언어 선택이 없으면 한국어로 표시됩니다.
|
||||
|
||||
## v4.0.14
|
||||
|
||||
### 계정별 이메일 발송 한도
|
||||
|
||||
@@ -75,15 +75,17 @@ 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.14"}`이 표시된다.
|
||||
정상이면 `{"ok":true,"version":"4.0.15"}`이 표시된다.
|
||||
|
||||
이메일 기능 확인:
|
||||
|
||||
1. 실제 수신 가능한 주소로 신규 가입한다.
|
||||
2. 인증 메일 링크를 누르기 전 로그인이 차단되는지 확인한다.
|
||||
3. 인증 후 로그인되는지 확인한다.
|
||||
4. 로그인 화면의 `비밀번호를 잊으셨나요?`에서 재설정 메일과 새 비밀번호 로그인을 확인한다.
|
||||
5. 같은 계정에서 인증·재설정 메일을 합산해 월 3회 초과 시 관리자 문의 안내가 표시되는지 확인한다.
|
||||
2. 인증 메일 링크를 누르기 전 로그인이 차단되고 로그인 화면에 `인증 메일 다시 보내기`가 표시되는지 확인한다.
|
||||
3. 로그인 화면에서 재발송 후 60초 대기와 최초 발송 포함 월 3회 안내가 표시되는지 확인한다.
|
||||
4. 인증 후 기본 한국어 완료 안내와 로그인이 정상 동작하는지 확인한다.
|
||||
5. 로그인 화면의 `비밀번호를 잊으셨나요?`와 비밀번호 찾기·재설정 화면이 선택 언어로 표시되는지 확인한다.
|
||||
6. 같은 계정에서 인증·재설정 메일을 합산해 월 3회 초과 시 관리자 문의 안내가 표시되는지 확인한다.
|
||||
7. 관리자 화면에서 미인증 회원의 `이메일 인증 승인` 버튼으로 수동 승인 후 로그인되는지 확인한다.
|
||||
|
||||
NAS 리버스 프록시는 `https://uniare.sori.studio`을 `http://<NAS_IP>:44082`로 연결한다.
|
||||
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
# 의사결정 이력
|
||||
|
||||
## 2026-06-25 v4.0.15 — 미인증 복구 동선은 로그인 화면에서 제공
|
||||
|
||||
💡 인증 메일을 잃어버린 사용자가 별도 화면을 찾아가지 않고 로그인 실패 지점에서 바로 복구하게 하기 위함.
|
||||
🔧 미인증 오류 코드를 프론트에 유지하고 재발송·월 3회 제한·관리자 문의를 표시, 관리자는 미인증 계정을 수동 승인.
|
||||
|
||||
## 2026-06-25 v4.0.14 — 계정별 자동 메일은 월 3회로 제한
|
||||
|
||||
💡 무료 메일 한도를 소수 계정의 반복 요청이 소진하지 않도록 보호하기 위함.
|
||||
|
||||
@@ -100,7 +100,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
|
||||
@@ -122,6 +122,9 @@ api/src/db.js
|
||||
계정별 월간 이메일 발송 기록
|
||||
api/src/db.js (`email_send_logs`)
|
||||
|
||||
계정 삭제 후 사용자명 재사용 회귀 테스트
|
||||
api/test/account-deletion.test.js
|
||||
|
||||
JWT 인증·권한
|
||||
api/src/middleware/auth.js
|
||||
|
||||
@@ -134,7 +137,7 @@ api/src/services/emailService.js
|
||||
덱 저장·조회·공개 목록
|
||||
api/src/routes/decks.js
|
||||
|
||||
회원·덱 관리자 API
|
||||
회원·이메일 인증 승인·덱 관리자 API
|
||||
api/src/routes/admin.js
|
||||
|
||||
카드 메타 합성
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
## 프로젝트 개요
|
||||
|
||||
- 서비스명: `UNIARE - Union Arena Deck Builder`
|
||||
- 현재 버전: `v4.0.14`
|
||||
- 현재 버전: `v4.0.15`
|
||||
- 프론트: 정적 HTML, CSS, JavaScript
|
||||
- 백엔드: Express, SQLite(`better-sqlite3`)
|
||||
- 운영: Docker Compose 기반 Nginx + API
|
||||
@@ -96,6 +96,8 @@
|
||||
- 인증 폼은 요청 중 제출 버튼을 잠그고 로딩 상태를 표시하며, 메일 재요청은 화면과 API에서 1분 간격으로 제한한다.
|
||||
- 가입 인증·인증 재전송·비밀번호 재설정 메일은 계정별 한국 시간 기준 월 3회까지만 발송한다.
|
||||
- 월간 한도 초과 시 자동 발송을 중단하고 관리자 이메일 `zenn@sori.studio` 문의를 안내한다.
|
||||
- 미인증 사용자가 로그인하면 로그인 화면에서 인증 메일을 즉시 재전송할 수 있으며, 최초 발송 포함 월 3회 제한과 관리자 문의 방법을 함께 표시한다.
|
||||
- 인증 완료 안내와 비밀번호 찾기·재설정 화면은 한국어를 기본값으로 한국어·일본어·영어 번역을 제공한다.
|
||||
- 사용자명은 대소문자를 구분하지 않고 중복을 차단한다.
|
||||
- 인증된 이메일은 프로필에서 직접 변경할 수 없다.
|
||||
- JWT 기본 만료는 7일이며 `JWT_EXPIRES`로 변경할 수 있다.
|
||||
@@ -108,6 +110,8 @@
|
||||
- 비회원은 덱을 서버에 저장하거나 공개 링크를 생성할 수 없다.
|
||||
- 로그인 사용자의 즐겨찾기는 계정 DB에 저장되어 브라우저와 기기가 달라도 유지된다.
|
||||
- 비로그인 즐겨찾기는 브라우저에 저장하고 로그인 시 유효한 덱만 계정으로 이전한다.
|
||||
- 관리자 화면은 회원 비활성화만 제공하며 계정 영구 삭제 UI는 제공하지 않는다.
|
||||
- 계정이 DB에서 삭제되면 인증 토큰·메일 기록·즐겨찾기는 연쇄 삭제되고, 기존 덱의 `user_id`는 `null`이 된다. 같은 사용자명으로 새로 가입해도 새 사용자 ID가 부여되어 기존 정보와 연결되지 않는다.
|
||||
|
||||
## 덱 저장 정책
|
||||
|
||||
@@ -230,6 +234,7 @@
|
||||
| GET | `/api/v1/admin/users` | 회원 목록·검색 (`deckPublic`, `deckTotal`, `lastLoginAt` 포함) |
|
||||
| GET | `/api/v1/admin/users/:id` | 회원 상세 (`deckPublic`, `deckTotal`, `deckCount`, `lastLoginAt` 포함) |
|
||||
| PUT | `/api/v1/admin/users/:id` | 회원 정보·역할·활성 상태 변경 |
|
||||
| POST | `/api/v1/admin/users/:id/verify-email` | 미인증 회원 이메일 수동 승인 |
|
||||
| POST | `/api/v1/admin/users/:id/reset-password` | 비밀번호 초기화 |
|
||||
| GET | `/api/v1/admin/decks` | 전체 덱 목록 |
|
||||
| DELETE | `/api/v1/admin/decks/:shareCode` | 덱 삭제 |
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# 업데이트 이력
|
||||
|
||||
## 2026-06-25 / v4.0.15 — 미인증 로그인 복구·인증 화면 다국어
|
||||
|
||||
### 수행 작업
|
||||
- 미인증 계정 로그인 시 같은 화면에서 인증 메일 재발송 기능 표시
|
||||
- 최초 발송 포함 월 3회 제한과 초과 시 `zenn@sori.studio` 관리자 문의 안내 추가
|
||||
- 관리자 회원 화면에 미인증 상태와 `이메일 인증 승인` 기능 추가
|
||||
- API 오류의 상태·코드를 프론트까지 전달해 미인증·월 한도 오류를 구분
|
||||
- 인증 완료 후 로그인 화면에 선택 언어 기준 완료 메시지 표시, 기본 언어는 한국어로 보정
|
||||
- `비밀번호를 잊으셨나요?`, 인증·비밀번호 찾기·재설정 화면을 한국어·일본어·영어 번역에 연결
|
||||
- 계정 삭제 후 동일 사용자명 재가입 시 기존 덱·인증 정보가 연결되지 않는 DB 회귀 테스트 추가
|
||||
|
||||
## 2026-06-25 / v4.0.14 — 계정별 월간 메일 한도
|
||||
|
||||
### 수행 작업
|
||||
|
||||
Reference in New Issue
Block a user