DOCS/troubleshooting/250831_slack_login_workspace_assignment_issue.md
happybell80 655252444d docs: workspace_id = team_id 관계 명확히 수정
- team_id가 그대로 workspace_id로 사용됨을 명시
- 해결 방안에 구체적인 코드 추가
- workspace_members 추가 SQL 예시 포함
2025-08-31 20:48:17 +09:00

3.3 KiB

Slack 로그인 시 Robeing 워크스페이스 미할당 문제

작성일: 2025-08-31
작성자: 51123 서버 관리자
상태: 🔴 미해결
영향: Slack OAuth 로그인 사용자 모두 기본값(rb8001) 사용


1. 문제 상황

Slack OAuth로 로그인한 사용자가 Robeing 워크스페이스에 자동 할당되지 않음

테스트 케이스

  • spaceboum (Google 로그인): workspace_members 없음 → 기본값 rb8001
  • 홍태주 (Slack 로그인): workspace_members 없음 → 기본값 rb8001

2. 현재 로직 분석

auth-server의 Slack 로그인 처리 (app/providers/slack.py)

  1. Slack 정보 수집:

    • team_id (Slack 워크스페이스 ID)
    • slack_user_id (Slack 사용자 ID)
    • email, name, picture
  2. SlackWorkspace 조회:

    • team_id로 SlackWorkspace 테이블 조회
    • slack_user_mapping에서 기존 매핑 확인
  3. User 생성/조회:

    • 매핑 있으면: 기존 User 사용
    • 매핑 없으면: 새 User 생성
  4. workspace_members 추가: 없음

    • Robeing 워크스페이스 할당 로직 부재
    • SlackWorkspace ≠ Robeing Workspace (별개 개념)

3. 데이터베이스 구조 분석

핵심 개념: team_id = workspace_id

  • Slack team_id: Slack 워크스페이스의 고유 ID (T로 시작)
  • workspace_members.workspace_id: team_id를 저장하는 필드
  • 즉, team_id가 그대로 workspace_id로 사용됨

slack_workspaces 테이블

  • 용도: Slack 앱 설치 정보 저장
  • 주요 컬럼: team_id (Slack ID), team_name, bot_token
  • 현재 데이터: GoodGang Labs (T035VFRKCN6), test (T097FCTDVEX)

workspace_members 테이블

  • 용도: 사용자와 Slack 워크스페이스 연결
  • 주요 컬럼: user_id, workspace_id (=team_id), robeing_id
  • 문제: Slack 로그인 시 자동 추가 안 됨

처리 흐름

테이블 용도 상태
users 사용자 정보 생성됨
slack_user_mapping Slack ID ↔ UUID 생성됨
slack_workspaces Slack 팀 정보 조회됨
workspace_members 사용자-워크스페이스 멤버십 추가 안 됨

4. 영향

  • 모든 Slack 로그인 사용자가 workspace_members 없음
  • Gateway가 기본값(rb8001 또는 rb10508) 사용
  • 사용자별 Robeing 할당 불가능

5. 해결 방안

수정 필요 코드 (/home/admin/auth-server/app/providers/slack.py)

304번 줄 이후 추가:

# workspace_members 추가 (team_id = workspace_id)
if team_id and user:
    db.execute(text("""
        INSERT INTO workspace_members (user_id, workspace_id, robeing_id)
        VALUES (:user_id, :workspace_id, :robeing_id)
        ON CONFLICT (user_id, workspace_id) DO UPDATE
        SET robeing_id = :robeing_id
    """), {
        "user_id": user.id,
        "workspace_id": team_id,  # team_id가 그대로 workspace_id
        "robeing_id": "rb8001"  # 또는 조건에 따라 rb10508
    })

수동 해결 SQL

-- happybell80 사용자 workspace_members 추가
INSERT INTO workspace_members (user_id, workspace_id, robeing_id)
VALUES (
    '1e16e9d5-59f3-54da-a661-8abeabff4230',  -- happybell80 user_id
    'T035VFRKCN6',  -- GoodGang Labs team_id
    'rb8001'
);