OmniAuth 소셜 로그인 (Google/Kakao) + 세션 관리

ID: 23c025d7-0154-44d0-8e04-e70cb1b9fad2

긴급 완료

## 목표
Devise + OmniAuth로 Google/Kakao 소셜 로그인을 구현합니다.

## 전제 조건
- User 모델이 이미 Devise와 통합되어 있다고 가정합니다
- User 모델에 provider, provider_id, email, nickname 등 컬럼이 있습니다
- devise gem, omniauth gem이 Gemfile에 이미 있습니다

## 작업 범위
### 1. Gemfile 추가
- `omniauth-kakao` gem 추가
- `bundle install` 실행

### 2. Devise 설정
- config/initializers/devise.rb 설정 (mailer, secret_key 등)
- OmniAuth provider 설정 (Google OAuth2, Kakao)
- 환경변수: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, KAKAO_CLIENT_ID, KAKAO_CLIENT_SECRET

### 3. OmniAuth 콜백 컨트롤러
- app/controllers/users/omniauth_callbacks_controller.rb
- Google 콜백: 사용자 find_or_create
- Kakao 콜백: 사용자 find_or_create
- User.from_omniauth 클래스 메서드

### 4. 세션 관리
- 로그인/로그아웃 플로우
- 비인증 사용자 → 로그인 페이지 리다이렉트
- authenticate_user! before_action 설정

### 5. 로그인 페이지 UI
- app/views/devise/sessions/new.html.erb
- Google 로그인 버튼 + Kakao 로그인 버튼
- Tailwind CSS 스타일링 (모바일 반응형)
- 로고 + 앱 소개 텍스트

### 6. 라우팅
- config/routes.rb에 devise_for :users 추가
- OmniAuth 콜백 라우트 설정

### 7. 테스트
- OmniAuth mock을 사용한 통합 테스트
- 로그인/로그아웃 플로우 테스트

## 참고
- 레거시: src/contexts/AuthContext.tsx 분석
- docs/migration/index.md §3-1 인증/세션 API

첨부 이미지

이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)

JPEG, PNG, GIF, WebP / 최대 10MB

담당자: auth-dev
생성일: 2026년 03월 02일 00:45

활동 로그

  • 팀리드 상태 변경: 리뷰 → 완료

    2026년 03월 02일 01:05:16

  • A
    auth-dev 상태 변경: 진행 중 → 리뷰

    2026년 03월 02일 00:59:15

  • A
    auth-dev OmniAuth 소셜 로그인 구현 완료 (Google + Kakao)

    2026년 03월 02일 00:59:14

    상세 보기

    ## 변경 사항

    ### 생성 파일
    - `app/controllers/users/omniauth_callbacks_controller.rb` - Google/Kakao 콜백 처리
    - `app/views/devise/sessions/new.html.erb` - 로그인 UI (소셜 로그인 버튼)
    - `app/views/devise/shared/_links.html.erb` - OmniAuth 링크
    - `app/views/devise/shared/_error_messages.html.erb` - 에러 표시
    - `app/views/layouts/devise.html.erb` - Devise 전용 레이아웃
    - `lib/omniauth/strategies/kakao.rb` - Kakao OAuth2 커스텀 strategy
    - `test/integration/omniauth_test.rb` - OmniAuth 통합 테스트 5건
    - `.env.example` - 환경변수 템플릿

    ### 수정 파일
    - `Gemfile` - omniauth-oauth2 추가 (kakao strategy 기반)
    - `config/initializers/devise.rb` - Google/Kakao OmniAuth provider 설정
    - `config/routes.rb` - devise_for + omniauth_callbacks, authenticated/devise root
    - `app/controllers/application_controller.rb` - authenticate_user!, layout_by_resource
    - `app/models/user.rb` - from_omniauth 클래스 메서드 추가, :omniauthable 활성화
    - `app/models/application_record.rb` - UUID 자동생성 조건 수정 (SQLite 호환)

    ### 해결한 문제
    1. omniauth-kakao gem이 빈 gem → 커스텀 strategy 작성
    2. SQLite UUID 자동생성 불가 → ApplicationRecord 콜백 조건 수정
    3. 로그인 페이지 sidebar 에러 → Devise 전용 레이아웃 분리

    ### 테스트 결과
    - 전체 27건 테스트 통과 (0 failures, 0 errors)

  • A
    auth-dev OmniAuth 소셜 로그인 구현 시작

    2026년 03월 02일 00:48:41

    상세 보기

    ## 작업 시작
    - Devise + OmniAuth 기반 Google/Kakao 소셜 로그인 구현
    - Task #1 (User 모델)에 의존하므로, User 모델이 존재한다고 가정하고 작업 진행
    - omniauth-kakao gem 추가, 콜백 컨트롤러, 라우팅, 로그인 UI, 테스트 작성 예정

  • A
    auth-dev 티켓 클레임 완료

    2026년 03월 02일 00:48:34