[Django] Django-allauth로 Kakao Login, Logout 해보기
django-allauth란?
소셜 인증 정보를 처리하는 장고의 응용 프로그램입니다.
공유해야하는 정보에 대해 관리하는데 로그인, 로그아웃, 회원가입 등등 통합적인 기능을 간편하게 제공합니다.
아래는 공식문서 사이트입니다.
https://github.com/pennersr/django-allauth
GitHub - pennersr/django-allauth: Integrated set of Django applications addressing authentication, registration, account managem
Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication. - GitHub - pennersr/django-allauth: Integrate...
github.com
allauth 장단점
모든 것에는 장단점이 있듯이 allauth패키지의 장점은 우선
장점 1. 거의 대부분의 소셜 로그인을 지원하고 회원가입이 가능하다.
장점 2. 로그인 연동 과정에서 SNS공급자가 제공하는 정보들에 대해서 입력을 요구할 수 있다.
장점 3. 설정에 따라 로그인, 회원가입을 통해서 패키지가 제공하는 모델(DB상)에 저장이 가능하다.
장점 4. remember me 기능도 지원된다. (사용자 정보를 기억하는 기능)
단점이라고 생각되는 것들도 있습니다.
단점 1. 거의 모든 기능과 설정 같은 부분들이 모두 내부에서 정의되어 있고 매우 방대해서
세부적인 부분에 대한 이해를 꼭 하고 있어야합니다.
단점 2. 템플릿관련 부분에서 수정에 따라 세밀한 수정과 추가적인 작업이 필요할 때가 있습니다.
본 게시물에서는 어떤 식으로 allauth를 적용시키는지에 대한 포스트이기 때문에
더 자세한 내용들은 아래 참고 링크에 써놓겠습니다.
1. 패키지 설치
pip install django-allauth
2. settings.py 수정
# allauth site_id
SITE_ID = 3
#--------------------------------------------------------------------------------------
INSTALLED_APPS = [
# allauth
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
# allauth - kakao (그리고 이부분에서 어떤 sns 플랫폼을 사용하냐에 따라 수정 및 추가가 필요합니다.)
'allauth.socialaccount.providers.kakao',
]
#--------------------------------------------------------------------------------------
# 로그인 후 리디렉션할 페이지
LOGIN_REDIRECT_URL = '/'
# 로그아웃 후 리디렉션할 페이지
ACCOUNT_LOGOUT_REDIRECT_URL = '/'
# 로그아웃 버튼 클릭 시 자동 로그아웃
ACCOUNT_LOGOUT_ON_GET = True
#--------------------------------------------------------------------------------------
MIDDLEWARE = [
'allauth.account.middleware.AccountMiddleware',
]
#--------------------------------------------------------------------------------------
TEMPLATES = [
{
...
,
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
...
"django.contrib.messages.context_processors.messages",
],
},
},
]
#--------------------------------------------------------------------------------------
# allauth backends
AUTHENTICATION_BACKENDS = (
# 'allauth' specific authentication methods, such as login by e-mail
'allauth.account.auth_backends.AuthenticationBackend',
# Needed to login by username in Django admin, regardless of 'allauth'
'django.contrib.auth.backends.ModelBackend',
)
#--------------------------------------------------------------------------------------
SOCIALACCOUNT_PROVIDERS = {
'kakao': {
'SCOPE': [
'profile_nickname', #sns플랫폼에 따라 달라지는 부분
'profile_image', #sns플랫폼에 따라 달라지는 부분
'account_email', #sns플랫폼에 따라 달라지는 부분
],
'AUTH_PARAMS': {
'access_type': 'online',
}
}
}
settings.py 부분에서 말씀드리고 싶은 것은 두 가지 정도 있습니다.
아래에서 작성할 부분이지만 allauth 패키지를 적용하며 꽤 삽질을 많이했습니다...
1. settings.py관련해서 allauth 공식문서를 잘 참고해야합니다. 무작정 블로그들의 글을 믿기 보다는 공식 문서를 참고하시면 최신화된 적용 방법을 알 수 있습니다.
2. 마지막 SOCIALACCOUNT_PROVIDERS 부분에서 SCOPE에 해당하는 것은 카카오 디벨로퍼 페이지에서 동의항목을 어떤 것을 선택했고 어떤 사용자 정보를 받느냐에 따라 달라집니다. 그래서 이 부분도 공식 문서를 참고 해주세요!
3. urls.py 설정
# main_project/urls.py
urlpatterns = [
path('', include('accounts.urls'))
]
# accounts_app/urls.py
from allauth.account.views import LogoutView
import accounts
from accounts.views import index
urlpatterns = [
path('accounts/', include('allauth.urls')),
path('accounts/logout/', LogoutView.as_view(), name='account_logout'),
]
한눈에 보시면 아시겠지만 include를 통해 생성한 accounts의 urls.py를 따르고
accounts앱의 urls.py에서는 로그인과 로그아웃 경로를 설정했습니다.
4. migrate
#변경한 것들 적용
python3 manage.py makemigrations
python3 manage.py migrate
5. 관리자 계정 생성
python3 manage.py createsuperuser
6. kakao Developers에서 내 앱 설정하기
우선 애플리케이션 등록으로 나의 앱을 만듭니다.
그 후 생성한 앱에 들어가면 좌측 카테고리에 사진과 같이 보이는데 저희는 5가지를 우선 필수로 수정하면 됩니다.
1. 앱 키
이 키는 조금 뒤 설정에서 사용할 키들입니다.
2. 플랫폼에서 사이트 도메인 설정
3. 카카오 로그인에서 활성화 설정과 로그인 시 Redirect URI 설정
본인의 프로젝트에 맞게 입력해주시면 됩니다.
4. 동의항목 설정
이 부분도 본인의 프로젝트에 맞게 수집해야할 정보에 대해 동의받을 항목을 설정하는 곳입니다.
그리고 개인정보에 있는 ID가 settings.py에서 SCOPE 부분에 넣었던 값입니다.
5. 로그아웃 Redirect URI 설정
7. 관리자 사이트에서 Social application 등록
아까 만든 관리자 계정으로 로그인 후 설정
Sites에서 이 두개를 추가
그 후 Social applications에서 설정 진행
1. Provider -> kakao
2. provider ID -> 카카오 디벨로퍼 앱 ID 작성
3. NAME -> 아무거나, 저는 kakao로 했습니다. (중요한 부분은 아님)
4. client id -> 아까 앱 키에서 RESTAPI 키 적으시면 됩니다.
5. Key -> 아무것도 안 적으셔도 됩니다.
6. sites -> 아까 추가로 적은 두 개를 선택해서 등록해주시면 됩니다.
8. 템플릿 수정
{% load socialaccount %}
{% providers_media_js %}
<form action="{% provider_login_url 'kakao' %}" method='post'>
{% csrf_token %}
<button>Kakao Login</button>
</form>
<form method="post" action="{% url 'account_logout' %}">
{% csrf_token %}
<input type="submit" value="Logout">
</form>
{{ user.email }}
참고 링크들
https://docs.allauth.org/en/latest/socialaccount/templates.html
https://velog.io/@yevini118/Django-allauth-카카오-로그인하기
https://djangojeng-e.github.io/2020/06/01/TodoList-16편-allauth를-사용하여-로그인-로그아웃/
이렇게 적용해보았는데요. 제가 이번에 allauth를 적용하며 직면한 문제들은 단순 설정 오류들이었습니다. 정답은 처음부터 공식문서를 먼저 참고하는 것이 맞았으나 성격이 급해 다른 분들의 기술 블로그를 참고했습니다.
공식문서의 중요성을 크게 깨달았던 계기였습니다.