Google 소셜 로그인 문제 해결 및 참고자료
관련 시리즈
Self-hosted Supabase Google 로그인 설정 (1/3) - 개념과 Google Cloud 설정
Self-hosted Supabase Google 로그인 설정 (2/3) - 서버 설정
Self-hosted Supabase Google 로그인 설정 (3/3) - Web 연동과 테스트
Google 소셜 로그인 설정 중 문제가 발생했을 때 참고할 수 있는 계층별 진단 방법, 오류 메시지별 대처법, 확인 명령어를 정리한 문서입니다.
1. 계층별 문제 확인
오류가 발생하면 모든 설정을 한꺼번에 바꾸지 말고 어느 구간에서 멈췄는지 확인합니다.
1.1 Web 단계 오류
증상:
- 로그인 버튼을 눌러도 이동하지 않음
- 브라우저 콘솔에서 JavaScript 오류 발생
redirect_to is not allowed오류
확인 사항:
-
signInWithOAuth()호출 여부 - Frontend
.env의 Supabase public URL과 anon key -
redirectTo값이 올바른지 - Backend
.env의ADDITIONAL_REDIRECT_URLS에 Web 주소 포함 여부
확인 명령:
# 브라우저 개발자 도구 → 콘솔 탭에서 JavaScript 오류 확인
# 브라우저 개발자 도구 → 네트워크 탭에서 API 요청 확인
1.2 Supabase API 또는 Server 단계 오류
기본 확인: 먼저 브라우저에서 다음 주소를 엽니다.
https://sb.example.com
Supabase Dashboard 인증 창이나 Supabase 화면이 보이면 DNS, HTTPS, Nginx, Kong의 기본 연결은 정상입니다. 이 경우 Google provider 설정을 확인합니다.
접속되지 않는 경우 화면에 표시된 증상에 따라 확인:
| 증상 | 확인 항목 |
|---|---|
| 사이트를 찾을 수 없음 | DNS A 레코드와 서버 IP 확인 |
| 인증서 경고 | sb.example.com 인증서 발급·만료 상태 확인 |
| 502 Bad Gateway | Kong 컨테이너와 Nginx proxy_pass 확인 |
| 연결 시간 초과 | 서버 방화벽의 443 포트와 Nginx 상태 확인 |
| Supabase 화면은 열리지만 Google 로그인 비활성화 | Auth 설정 확인 |
확인 명령:
# DNS 확인
dig +short sb.example.com
# Nginx 상태
systemctl status nginx
# Kong 및 Auth 컨테이너 상태
cd /root/supabase/docker
docker compose ps kong auth
# Auth 로그
docker compose logs --tail=200 auth
# 인증서 확인
certbot certificates
Google provider 관련 확인 항목:
-
.env의GOOGLE_ENABLED=true -
docker-compose.yml의GOTRUE_EXTERNAL_GOOGLE_*매핑 - 변경 후 Auth 컨테이너를 다시 생성했는지
1.3 Google 단계 오류
증상:
redirect_uri_mismatchaccess_blocked- 테스트 사용자만 로그인 가능
확인 사항:
- OAuth Client 유형이 웹 애플리케이션인지
- 승인된 리디렉션 URI가 정확한지 (
https://sb.example.com/auth/v1/callback) - 앱 대상이 외부인지
- 테스트 상태라면 사용자를 등록했는지
- 앱 게시 상태와 필요한 검증을 완료했는지
2. 오류 메시지별 대처법
2.1 redirect_uri_mismatch
의미: Google Cloud의 승인된 리디렉션 URI가 실제 Supabase 콜백과 다릅니다.
정확한 값:
https://sb.example.com/auth/v1/callback
자주 발생하는 실수:
다음 차이도 모두 불일치로 처리됩니다.
http와httpsexample.com과www.example.com- 포트 번호 (
:443,:8000등) - 경로 (
/auth/v1/callbackvs/callback) - 마지막 슬래시 (
/callbackvs/callback/)
해결:
- Google Cloud Console → OAuth 클라이언트 → 승인된 리디렉션 URI 확인
- Backend
.env의API_EXTERNAL_URL확인 - 두 값이 정확히 일치하는지 확인
2.2 Unsupported provider: provider is not enabled
의미: Auth 컨테이너에서 Google provider가 활성화되지 않았습니다.
해결:
- Backend
.env확인:
GOOGLE_ENABLED=true
docker-compose.yml의 Auth 서비스에 매핑 확인:
GOTRUE_EXTERNAL_GOOGLE_ENABLED: ${GOOGLE_ENABLED}
- Auth 컨테이너 재생성:
cd /root/supabase/docker
docker compose up -d --force-recreate --no-deps auth
2.3 redirect_to is not allowed
의미: Web 코드의 redirectTo가 Supabase 허용 목록에 없습니다.
해결:
Backend .env에서 ADDITIONAL_REDIRECT_URLS 확인:
ADDITIONAL_REDIRECT_URLS=https://example.com/*,https://www.example.com/*
수정 후 Auth 컨테이너 재생성:
docker compose up -d --force-recreate --no-deps auth
2.4 Google access_blocked
의미: Google 앱 설정이 완료되지 않았거나 테스트 사용자가 아닙니다.
원인:
- Google 앱이 테스트 상태인데 로그인 계정이 테스트 사용자로 등록되지 않음
- 앱 브랜딩·대상·범위 설정이 완료되지 않음
해결:
- Google Cloud Console → OAuth 동의 화면 확인
- 앱 대상이 "외부"인지 확인
- 테스트 상태라면 테스트 사용자에 계정 추가
- 브랜딩 정보 입력 완료 여부 확인
2.5 로그인 후 잘못된 사이트로 이동
의미: 복귀 주소 설정이 잘못되었습니다.
확인할 세 값:
1. Backend SITE_URL
2. Backend ADDITIONAL_REDIRECT_URLS
3. Frontend 코드의 redirectTo
해결:
- Backend
.env:
SITE_URL=https://example.com
ADDITIONAL_REDIRECT_URLS=https://example.com/*,https://www.example.com/*
- Frontend 코드:
redirectTo: `${window.location.origin}/auth/callback`
- 모든 주소가 동일한 도메인으로 설정되었는지 확인
2.6 로그인 후 세션이 없음
원인:
- Web 콜백에
code가 없음 - PKCE 환경에서
exchangeCodeForSession()미호출 - 동일한 code를 두 번 교환함
- 세션이 브라우저 저장소에 저장되지 않음
- Nginx의
X-Forwarded-Proto가https가 아님
해결:
- 브라우저 개발자 도구 → 네트워크 탭에서
/auth/callbackURL 확인 - URL에
code파라미터가 있는지 확인
https://example.com/auth/callback?code=XXXXX
- Frontend 코드에서
exchangeCodeForSession()호출 확인:
const url = new URL(window.location.href)
const code = url.searchParams.get('code')
if (code) {
await supabase.auth.exchangeCodeForSession(url.href)
}
브라우저 저장소 확인:
- 개발자 도구 → 애플리케이션 → 로컬 스토리지
supabase-auth-token키가 있는지 확인
Nginx 설정 확인:
proxy_set_header X-Forwarded-Proto $scheme;
2.7 Auth 컨테이너가 시작되지 않음
확인:
cd /root/supabase/docker
docker compose logs --tail=200 auth
주요 원인:
- Client ID 또는 Secret 누락
- 잘못된 URL 형식
docker-compose.ymlYAML 들여쓰기 오류.env변수가 Compose에 전달되지 않음
해결:
.env파일 검증:
cat .env | grep GOOGLE
- Compose 파일 검증:
docker compose config | grep -A 5 GOTRUE_EXTERNAL_GOOGLE
- 환경 변수가 Auth 컨테이너에 전달되었는지 확인:
docker exec supabase-auth env | grep GOTRUE_EXTERNAL_GOOGLE
3. 유용한 확인 명령어 모음
3.1 Google Provider 활성화 확인
Supabase 공개 anon key를 사용해 Auth 설정 API를 조회합니다.
cd /root/supabase/docker
set -a
. ./.env
set +a
curl -s \
-H "apikey: $ANON_KEY" \
https://sb.example.com/auth/v1/settings | jq '.external'
정상 응답:
{
"google": true
}
3.2 Auth 컨테이너 환경 변수 확인
Secret 값을 직접 출력하지 않고 설정 여부만 확인합니다.
docker exec supabase-auth sh -c '
echo "enabled=$GOTRUE_EXTERNAL_GOOGLE_ENABLED"
echo "redirect=$GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI"
test -n "$GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID" && echo "client_id=set"
test -n "$GOTRUE_EXTERNAL_GOOGLE_SECRET" && echo "secret=set"
'
정상 출력:
enabled=true
redirect=https://sb.example.com/auth/v1/callback
client_id=set
secret=set
3.3 외부 콜백 경로 확인
curl -I https://sb.example.com/auth/v1/callback
콜백을 직접 호출하면 정상 OAuth 요청이 아니므로 4xx 오류가 나올 수 있습니다. 중요한 것은 DNS, HTTPS, Nginx 오류가 아니라 Supabase Auth의 HTTP 응답을 받는지 여부입니다.
3.4 데이터베이스에서 사용자 확인
docker exec supabase-db psql -U postgres -d postgres -c \
"SELECT id, email, created_at, raw_user_meta_data->>'full_name' as name
FROM auth.users
ORDER BY created_at DESC
LIMIT 5;"
3.5 Kong 라우팅 설정 확인
cat /root/supabase/docker/volumes/api/kong.yml | grep -A 10 auth-v1-open-callback
3.6 포트 리스닝 상태 확인
# Nginx 443 포트
ss -lntp | grep :443
# Kong 8000 포트
ss -lntp | grep :8000
# 전체 Supabase 관련 포트
ss -lntp | grep -E ':(443|8000|8443|9999)\b'
4. 최종 설정 요약
4.1 Google Cloud
애플리케이션 유형:
웹 애플리케이션
승인된 JavaScript 원본:
https://example.com
https://www.example.com
승인된 리디렉션 URI:
https://sb.example.com/auth/v1/callback
4.2 Backend 서버 .env
# API 주소
SUPABASE_PUBLIC_URL=https://sb.example.com
API_EXTERNAL_URL=https://sb.example.com
# Web 복귀 주소
SITE_URL=https://example.com
ADDITIONAL_REDIRECT_URLS=https://example.com/*,https://www.example.com/*
# Google Provider
GOOGLE_ENABLED=true
GOOGLE_CLIENT_ID=YOUR_CLIENT_ID.apps.googleusercontent.com
GOOGLE_SECRET=YOUR_GOOGLE_CLIENT_SECRET
4.3 Docker Compose 매핑
services:
auth:
environment:
API_EXTERNAL_URL: ${API_EXTERNAL_URL}
GOTRUE_SITE_URL: ${SITE_URL}
GOTRUE_URI_ALLOW_LIST: ${ADDITIONAL_REDIRECT_URLS}
GOTRUE_EXTERNAL_GOOGLE_ENABLED: ${GOOGLE_ENABLED}
GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
GOTRUE_EXTERNAL_GOOGLE_SECRET: ${GOOGLE_SECRET}
GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI: ${API_EXTERNAL_URL}/auth/v1/callback
4.4 Frontend .env
PUBLIC_SUPABASE_URL=https://sb.example.com
PUBLIC_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_OR_PUBLISHABLE_KEY
4.5 Frontend 코드
// 로그인 시작
await supabase.auth.signInWithOAuth({
provider: 'google',
options: {
redirectTo: `${window.location.origin}/auth/callback`,
},
})
// 세션 교환 (/auth/callback 페이지)
const url = new URL(window.location.href)
const code = url.searchParams.get('code')
if (code) {
await supabase.auth.exchangeCodeForSession(url.href)
}
4.6 가장 중요한 두 주소
Google이 돌아오는 Supabase API:
https://sb.example.com/auth/v1/callback
Supabase가 사용자를 보내는 Web:
https://example.com/auth/callback
5. 보안 관련 참고
5.1 Secret 교체 절차
Google Client Secret이 유출되었다면:
- Google Cloud에서 새 Client Secret을 발급합니다.
- Backend 서버
.env의GOOGLE_SECRET을 교체합니다. - Auth 컨테이너를 다시 생성합니다.
cd /root/supabase/docker
docker compose up -d --force-recreate --no-deps auth
- Google 로그인을 테스트합니다.
- 기존 Secret을 Google Cloud에서 삭제합니다.
5.2 보안 체크리스트
- Google Client Secret은 Backend 서버
.env에만 저장 - Backend
.env가 Git 추적 대상이 아닌지 확인 - Google 승인 리디렉션 URI는 필요한 주소만 등록
-
ADDITIONAL_REDIRECT_URLS를 불필요하게 넓히지 않음 - Frontend에는 anon/publishable key만 사용
-
SERVICE_ROLE_KEY는 브라우저와 공개 문서에 노출 금지 - Web과 API 모두 HTTPS 사용
- 운영 환경에서 불필요한 localhost 복귀 주소 제거
6. 공식 참고 링크
6.1 Supabase 공식 문서
6.2 Google 공식 문서
6.3 기타 참고
작성일: 2026-07-18
적용 환경: Docker 기반 Self-hosted Supabase + SvelteKit


주파수 소통방 (0)
로딩 중...