diff --git a/troubleshooting/251015_slack_user_403_team_mapping.md b/troubleshooting/251015_slack_user_403_team_mapping.md new file mode 100644 index 0000000..e777346 --- /dev/null +++ b/troubleshooting/251015_slack_user_403_team_mapping.md @@ -0,0 +1,70 @@ +# Slack 사용자 403 Forbidden - team 매핑 불일치 + +**날짜**: 2025-10-15 +**작성자**: Claude +**관련 파일**: `robeing-gateway/app/database.py:353-380` + +--- + +## 문제 상황 + +**증상**: Slack 사용자 U09BQSLB11R, U09DWLARFQQ 메시지 → 403 Forbidden + +**로그**: +``` +WARNING - No UUID found for Slack user U09BQSLB11R +ERROR - User not registered: team_id=T09C98KB933, slack_user_id=U09BQSLB11R +``` + +**빈도**: 12건 (10/14 11:53~15:38) + +--- + +## 원인 + +**database.py:363-369**: `slack_user_to_uuid()` JOIN 실패 + +```sql +SELECT u.id FROM "user" u +JOIN team t ON u.team_id = t.id +JOIN slack_workspace sw ON t.id = sw.team_id -- 실패 지점 +WHERE sw.slack_team_id = :team_id +``` + +**DB 상태**: +- slack_workspace.team_id: `79441171...` (Company-X) +- 사용자 team_id: `38bdc27d...` (Robeing) ← 불일치 + +**결과**: JOIN 실패 → UUID 변환 실패 → 403 + +--- + +## 해결 + +### 사용자 팀 변경 + +```sql +UPDATE "user" SET team_id = '79441171-3951-4870-beb8-916d07fe8be5' +WHERE email IN ('hykim@sigong-ip.com', 'iskang@sigong-ip.com'); +``` + +### 검증 + +```bash +curl -X POST http://localhost:8100/slack/events \ + -d '{"team_id":"T09C98KB933","event":{"user":"U09BQSLB11R"}}' +# 200 OK, UUID 변환 성공 +``` + +--- + +## 교훈 + +### Slack OAuth 설치 시 +- user 테이블에 oauth_providers 추가만으로 불충분 +- slack_workspace와 user.team_id 일치 검증 필요 +- 팀 이동 시 Slack 매핑 재확인 필수 + +### 예방책 +- Slack 설치 시 team_id 검증 로직 추가 +- 관리 대시보드에서 팀-워크스페이스 매핑 시각화