docs: UUID/username 혼용 문제 - 51124/로컬 조사 결과 반영
This commit is contained in:
parent
5c17544c87
commit
eb0f112a6b
@ -18,10 +18,11 @@
|
||||
|
||||
### 실제 사례
|
||||
- User: happybell80
|
||||
- UUID: 1e16e9d5-59f3-54da-a661-8abeabff4230
|
||||
- JWT sub: "happybell80" (UUID 아님)
|
||||
- ChromaDB user_id: "happybell80" (UUID 아님)
|
||||
- conversation_logs: user_id NULL (UUID 타입이라 username 저장 실패)
|
||||
- UUID: 1e16e9d5-59f3-54da-a661-8abeabff4230 (UUID4 랜덤 생성)
|
||||
- JWT sub: "happybell80" (username, UUID 아님)
|
||||
- ChromaDB user_id: "happybell80" (username으로 저장됨)
|
||||
- PostgreSQL: "Non-UUID user_id" 로그 발생
|
||||
- conversation_logs: user_id NULL, slack_user_id에 우회 저장
|
||||
|
||||
---
|
||||
|
||||
@ -39,30 +40,43 @@ jwt_token = create_access_token(data={
|
||||
```
|
||||
**문제**: JWT 표준에서 `sub`는 unique identifier여야 하는데 username 사용
|
||||
|
||||
### 2.2 robeing-gateway (51123)
|
||||
### 2.2 robeing-gateway (51123) - 확인 완료
|
||||
```python
|
||||
# /home/admin/robeing-gateway/app/main.py:58
|
||||
username = payload.get("sub") or payload.get("username")
|
||||
# username을 user_id처럼 사용
|
||||
# /home/admin/robeing-gateway/app/main.py:232-235
|
||||
user_info = await get_user_by_username(x_user_id)
|
||||
if user_info:
|
||||
user_uuid = user_info['user_id'] # DB 조회로 UUID 획득
|
||||
|
||||
# database.py:184
|
||||
SELECT id::text as user_id # PostgreSQL UUID를 문자열로 변환
|
||||
```
|
||||
**문제**: username을 UUID로 변환 시도하지만 실패 시 그대로 전달
|
||||
**확인된 사항**:
|
||||
- username → UUID 변환은 DB 조회로만 수행 (계산된 변환 없음)
|
||||
- UUID4 형식만 사용 (UUID5 사용 안 함)
|
||||
- users 테이블에 username 없으면 변환 실패
|
||||
|
||||
### 2.3 rb8001 (51124)
|
||||
### 2.3 rb8001 (51124) - 확인 완료
|
||||
```python
|
||||
# auth.py:36
|
||||
user_id = payload.get("sub") # username을 user_id로 착각
|
||||
# ChromaDB에 username으로 저장
|
||||
metadata={"user_id": user_id} # 실제로는 username
|
||||
user_id = payload.get("sub") # JWT sub(username)를 그대로 사용
|
||||
# UUID 변환 없이 ChromaDB에 저장
|
||||
metadata={"user_id": user_id} # username이 저장됨
|
||||
```
|
||||
**문제**: ChromaDB에서 사용자 구분 불가능 (UUID가 아닌 username)
|
||||
**확인된 문제**:
|
||||
- ChromaDB에 "happybell80" (username) 형식으로 저장
|
||||
- PostgreSQL 저장 시 "Non-UUID user_id" 에러 로그 발생
|
||||
- user_id NULL, slack_user_id로 우회 저장
|
||||
|
||||
### 2.4 Frontend
|
||||
### 2.4 Frontend - 확인 완료
|
||||
```typescript
|
||||
// robeing-api.ts:31, 157, 223, 262, 308, 354, 402, 448, 495
|
||||
userId: string = 'test_user' // 하드코딩
|
||||
localStorage.getItem('user_id') || 'default_user' // 폴백
|
||||
// robeing-api.ts:157
|
||||
const userId = localStorage.getItem('user_id') || 'default_user';
|
||||
// localStorage의 'user_id'는 Slack ID (U0925SXQFDK 형식)
|
||||
```
|
||||
**문제**: 실제 UUID 대신 임의 문자열 사용
|
||||
**확인된 문제**:
|
||||
- localStorage 'user_id' = Slack ID (예: U0925SXQFDK)
|
||||
- JWT sub도 아니고 UUID도 아님
|
||||
- 완전히 다른 체계 사용 중
|
||||
|
||||
### 2.5 Database
|
||||
```sql
|
||||
@ -84,11 +98,12 @@ slack_user_id: 'happybell80' -- 우회 저장
|
||||
- UUID 사용 표준 부재
|
||||
- 타입 검증 없는 문자열 전달
|
||||
|
||||
### 3.2 구현 문제
|
||||
- auth-server: JWT `sub`에 username 사용
|
||||
- Gateway: username → UUID 변환 실패 시 방치
|
||||
- Frontend: localStorage에 UUID 저장 안함
|
||||
- rb8001: JWT `sub`를 무조건 user_id로 간주
|
||||
### 3.2 구현 문제 (확인 완료)
|
||||
- auth-server: JWT `sub`에 username 사용 (UUID 대신)
|
||||
- Gateway: DB 조회로만 UUID 변환 (실패 시 원래 값 전달)
|
||||
- Frontend: localStorage에 Slack ID 저장 (UUID도 username도 아님)
|
||||
- rb8001: JWT `sub`를 변환 없이 그대로 user_id로 사용
|
||||
- skill-email: slack_user_id 컬럼으로 Slack ID 조회
|
||||
|
||||
---
|
||||
|
||||
@ -139,18 +154,23 @@ username = payload.get("username") # username
|
||||
|
||||
## 5. 테스트 시나리오
|
||||
|
||||
### 5.1 현재 상태 확인
|
||||
### 5.1 현재 상태 확인 (검증 완료)
|
||||
```bash
|
||||
# JWT payload 확인
|
||||
curl -X POST http://localhost:9000/auth/gmail/login
|
||||
# sub: "happybell80" (username)
|
||||
|
||||
# DB 확인
|
||||
SELECT id, username FROM users WHERE username='happybell80';
|
||||
# UUID: 1e16e9d5-59f3-54da-a661-8abeabff4230
|
||||
# UUID: 1e16e9d5-59f3-54da-a661-8abeabff4230 (UUID4)
|
||||
|
||||
# conversation_logs 확인
|
||||
SELECT user_id, slack_user_id FROM conversation_logs;
|
||||
# user_id: NULL, slack_user_id: 'happybell80'
|
||||
# user_id: NULL (UUID 타입이라 username 저장 실패)
|
||||
# slack_user_id: 'happybell80' (우회 저장)
|
||||
|
||||
# PostgreSQL 로그
|
||||
# "Non-UUID user_id" 에러 발생
|
||||
```
|
||||
|
||||
### 5.2 수정 후 검증
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user