DOCS/troubleshooting/250918_gmail_token_slack_user_id_column_missing.md
happybell80 8c02b80359 Fix incorrect table names in documentation
- gmail_tokens → gmail_token (33 files)
- companies → company (17 files)
- conversation_logs → conversation_log (27 files)
- workspace_members → workspace_member (28 files)

All table names now match the actual PostgreSQL schema
2025-09-26 00:49:47 +09:00

1.9 KiB

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

현재 문제 (2025-09-18)

실제 상태

코드 문제

# 현재 코드 (잘못됨)
cur.execute("""
    SELECT ... FROM gmail_token
    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

관련 문서