DOCS/troubleshooting/250918_gmail_token_slack_user_id_column_missing.md
Claude-51124 d6accf4c90 docs: Gmail 토큰 문제 해결 방법 추가
- 수정 필요 파일 및 줄 번호 명시
- db_credentials_provider.py 3개 위치 수정 필요
- JOIN을 사용한 구체적인 수정 방법 제시
2025-09-18 18:23:12 +09:00

1.9 KiB

Gmail Token 조회 실패 - slack_user_id 컬럼 없음

현재 문제 (2025-09-18)

실제 상태

코드 문제

# 현재 코드 (잘못됨)
cur.execute("""
    SELECT ... FROM gmail_tokens
    WHERE slack_user_id = %s  # 존재하지 않는 컬럼
""", (user_id,))

# 올바른 방법
cur.execute("""
    SELECT gt.* FROM gmail_token gt
    JOIN user u ON gt.user_id = u.id
    WHERE u.oauth_id = %s AND gt.is_equipped = true
""", (slack_id,))

DB 스키마 (실제)

CREATE TABLE gmail_token (
    id UUID PRIMARY KEY,
    user_id UUID NOT NULL,  -- user 테이블 FK
    token_data JSONB,  -- access_token, refresh_token 포함
    equipped_to VARCHAR(50),  -- Gmail 계정
    is_equipped BOOLEAN DEFAULT false
);
-- user.oauth_id에 Slack ID 저장됨

토큰 자동 갱신 (정상 작동)

if creds and creds.expired and creds.refresh_token:
    creds.refresh(Request())
    self.creds_provider.save_credentials(user_id, creds)

트러블슈팅

토큰 조회 실패

  • slack_user_id 컬럼 없음 → JOIN 사용 필요
  • is_equipped = true 확인

자동 갱신 실패

  • refresh_token 존재 여부
  • Google OAuth 설정 확인

해결 방법

수정 필요 파일

/home/admin/ivada_project/skill_email/services/db_credentials_provider.py

  • 68번 줄: get_credentials()
  • 170번 줄: save_credentials()
  • 234번 줄: has_equipped_token()

수정 내용

# 기존 (잘못됨)
WHERE slack_user_id = %s

# 수정 (JOIN 사용)
FROM gmail_token gt
JOIN user u ON gt.user_id = u.id
WHERE u.oauth_id = %s

관련 문서