docs: UUID/username 혼용 문제 - 51123 서버 확인 완료, auth-server 즉시 수정 가능
This commit is contained in:
parent
eb0f112a6b
commit
72147aeecc
@ -28,17 +28,22 @@
|
||||
|
||||
## 2. 영향 분석
|
||||
|
||||
### 2.1 auth-server (51123)
|
||||
### 2.1 auth-server (51123) - 확인 완료
|
||||
```python
|
||||
# /home/admin/auth-server/app/providers/gmail.py:208-209
|
||||
# /home/admin/auth-server/app/providers/gmail.py
|
||||
# Line 191: user_id_str = str(user.id) # UUID 접근 가능
|
||||
# Line 209: "sub": username # 🔴 UUID 대신 username 사용
|
||||
jwt_token = create_access_token(data={
|
||||
"sub": username, # 🔴 UUID 대신 username
|
||||
"sub": username, # username 사용 (UUID 사용 가능한데도!)
|
||||
"email": user_email,
|
||||
"name": user_name,
|
||||
"username": username,
|
||||
})
|
||||
# Line 223: Redis에도 "user_id": username 저장
|
||||
```
|
||||
**문제**: JWT 표준에서 `sub`는 unique identifier여야 하는데 username 사용
|
||||
**확인된 문제**:
|
||||
- user.id (UUID) 접근 가능함에도 JWT sub에 username 사용
|
||||
- Redis에도 username을 user_id로 저장
|
||||
|
||||
### 2.2 robeing-gateway (51123) - 확인 완료
|
||||
```python
|
||||
@ -111,21 +116,27 @@ slack_user_id: 'happybell80' -- 우회 저장
|
||||
|
||||
### 4.1 긴급 조치 (Phase 1)
|
||||
|
||||
#### auth-server 수정
|
||||
#### auth-server 수정 (즉시 가능)
|
||||
```python
|
||||
# gmail.py:208 수정 필요
|
||||
# gmail.py:209 수정 필요 (Line 191에서 이미 user.id 사용 가능)
|
||||
jwt_token = create_access_token(data={
|
||||
"sub": str(user.id), # UUID 사용
|
||||
"sub": str(user.id), # Line 191의 user_id_str 사용
|
||||
"username": username, # username은 별도 필드
|
||||
"email": user_email,
|
||||
"name": user_name,
|
||||
})
|
||||
|
||||
# Line 223 Redis 저장도 수정
|
||||
"user_id": str(user.id), # username 대신 UUID
|
||||
```
|
||||
|
||||
#### Gateway username → UUID 매핑
|
||||
#### Gateway username → UUID 매핑 (확인 완료)
|
||||
```python
|
||||
# 이미 구현되어 있음 (get_user_by_username)
|
||||
# 하지만 JWT sub가 UUID면 불필요
|
||||
# database.py:170-199 이미 완벽 구현
|
||||
async def get_user_by_username(username: str):
|
||||
# SELECT id::text as user_id FROM users WHERE username = :username
|
||||
# username으로 UUID 조회 정상 작동
|
||||
# JWT sub가 UUID로 바뀌면 이 변환 불필요해짐
|
||||
```
|
||||
|
||||
### 4.2 중기 개선 (Phase 2)
|
||||
@ -154,22 +165,24 @@ username = payload.get("username") # username
|
||||
|
||||
## 5. 테스트 시나리오
|
||||
|
||||
### 5.1 현재 상태 확인 (검증 완료)
|
||||
### 5.1 현재 상태 확인 (51123 검증 완료)
|
||||
```bash
|
||||
# JWT payload 확인
|
||||
curl -X POST http://localhost:9000/auth/gmail/login
|
||||
# sub: "happybell80" (username)
|
||||
|
||||
# DB 확인
|
||||
# Users 테이블 확인 (51123)
|
||||
SELECT id, username FROM users WHERE username='happybell80';
|
||||
# UUID: 1e16e9d5-59f3-54da-a661-8abeabff4230 (UUID4)
|
||||
# id: 1e16e9d5-59f3-54da-a661-8abeabff4230 (정상 UUID4)
|
||||
# username: happybell80
|
||||
|
||||
# conversation_logs 확인
|
||||
SELECT user_id, slack_user_id FROM conversation_logs;
|
||||
# user_id: NULL (UUID 타입이라 username 저장 실패)
|
||||
# slack_user_id: 'happybell80' (우회 저장)
|
||||
# auth-server 코드 확인
|
||||
# Line 191: user_id_str = str(user.id) # UUID 문자열 생성
|
||||
# Line 209: "sub": username # 하지만 JWT에 username 사용
|
||||
# Line 223: "user_id": username # Redis에도 username
|
||||
|
||||
# PostgreSQL 로그
|
||||
# Gateway 변환 함수 확인
|
||||
# database.py:184: SELECT id::text as user_id
|
||||
# username → UUID 변환 정상 작동
|
||||
|
||||
# conversation_logs 확인 (51124 보고)
|
||||
# user_id: NULL, slack_user_id: 'happybell80'
|
||||
# "Non-UUID user_id" 에러 발생
|
||||
```
|
||||
|
||||
@ -209,11 +222,17 @@ SELECT user_id, slack_user_id FROM conversation_logs;
|
||||
3. rb8001: UUID와 username 구분 처리
|
||||
|
||||
### 예상 작업 시간
|
||||
- auth-server 수정: 30분
|
||||
- auth-server 수정: **10분** (Line 209, 223만 수정)
|
||||
- Frontend 수정: 1시간
|
||||
- rb8001 수정: 30분
|
||||
- 테스트 및 검증: 1시간
|
||||
- **총 예상: 3시간**
|
||||
- **총 예상: 2시간 40분**
|
||||
|
||||
### 51123 서버 준비 완료
|
||||
- users 테이블에 UUID 정상 저장됨
|
||||
- Gateway UUID 변환 함수 구현 완료
|
||||
- auth-server에서 user.id 접근 가능 확인
|
||||
- **즉시 수정 가능한 상태**
|
||||
|
||||
---
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user