django 소셜로그인 시 url 패턴 오류
/api/v1/socials/kakao/login/ 까지는 접속 가능
이후 회원가입을 진행하려고 하면 아래와 같은 오류 발생
NoReverseMatch at /api/v1/socials/kakao/login/ Reverse for 'kakao_callback' not found. 'kakao_callback' is not a valid view function or pattern name.
카카오 디벨로퍼스 redirect URI는 제대로 등록된 상태
→ url 패턴 자체에 문제가 있을것 같다고 추정함
기존 코드
socials>urls.py
app_name = 'socials'
urlpatterns = [
path('', include("allauth.urls")),
path('check-user/', views.CheckUserView.as_view(), name='check_user'),
path('social-link-or-create/', views.SocialLinkOrCreateView.as_view(), name='social_link_or_create'),
path('link-social-account/', views.LinkSocialAccountView.as_view(), name='link_social_account'),
path('linked-social-accounts/', views.GetLinkedSocialAccountsView.as_view(), name='linked_social_accounts'),
path('default-social-accounts/', views.SetDefaultSocialProviderView.as_view(), name='default_social_provider'),
]
문제의 원인
1. URL Reverse와 네임스페이스 충돌
Django에서 app_name을 설정하면, URL 이름에 네임스페이스가 추가됨
ex) name='check_user' URL은 'socials:check_user'로 참조 하지만 기존의 코드나 설정(예: callback URL에서 reverse 함수나 URL 이름 참조)이 socials: 네임스페이스를 고려하지 않고 기존 이름(check_user)을 참조하고 있으면 오류가 발생
2. allauth의 기본 URL 네임스페이스
allauth.urls도 네임스페이스를 사용하지 않는 상태에서 URL을 정의하기 때문에, app_name을 추가하면 allauth에서 사용하는 콜백 URL도 네임스페이스 충돌로 영향을 받을 수 있음
3. 콜백 URL이 변경됨
app_name='socials'이 추가되면, 콜백 URL을 생성하거나 참조할 때 기존의 URL 이름이 socials: 네임스페이스를 요구하는데 allauth는 이 변경 사항을 알지 못하고 기존 URL 이름을 사용하기 때문에 오류가 발생
수정코드
urlpatterns = [
path('', include("allauth.urls")),
path('check-user/', views.CheckUserView.as_view(), name='check_user'),
path('social-link-or-create/', views.SocialLinkOrCreateView.as_view(), name='social_link_or_create'),
path('link-social-account/', views.LinkSocialAccountView.as_view(), name='link_social_account'),
path('linked-social-accounts/', views.GetLinkedSocialAccountsView.as_view(), name='linked_social_accounts'),
path('default-social-accounts/', views.SetDefaultSocialProviderView.as_view(), name='default_social_provider'),
]
앱네임 제거하여 네임스페이스가 영향을 받지 않게 함
교훈: 공식문서를 잘 보고 생각을 잘 하자