SOCO
Django로 kakao 소셜 로그인 구현 본문
장고와 플라스크에 대한 경험이 아직 부족하지만, 지금까지 느낀 바로는
장고와 플라스크는 정말 서로의 색(장단점)이 뚜렷한 것 같습니다.
플라스크는 micro framework라는 이름에 걸맞게, python을 배웠다면 별도로 배울 내용이 적지만, 그만큼 신경써야할 것이 많고,
장고는 macro framework 답게 많은 기능을 제공해주지만, 그만큼 공부해야할 양이 많은 것 같습니다.
프로젝트를 시작하면 대부분 회원가입, 로그인 부분을 먼저 다루게 되는 것 같습니다.
프로젝트가 어느 정도 진행되고 나면 기능을 보완/보강하게 되는데
최근에 소셜 로그인에 관심이 생겨 django 프로젝트에 kakao 소셜 로그인 기능을 도입해보았습니다.
소셜로그인에 대한 설명은 간단하게 넘어가도록 하겠습니다.
해당 포스팅은 아래 블로그의 내용을 많이 참고하였습니다 !
https://rollonoa.tistory.com/entry/Allauth를-이용한-Django에서-소셜로그인-구현하기
1. 소셜로그인이란
포털, 사회관계망 서비스(SNS) 가입자가 해당 ID로 다른 웹사이트나 애플리케이션에 접속하는 기능을 말합니다.
예) 웹사이트나 모바일 앱에 새롭게 가입을 하려고 할 때 볼 수 있는 카카오로 계속하기, Google로 계속하기 등
2. 기능구현
: Django의 Allauth 이용 : https://django-allauth.readthedocs.io/en/latest/index.html
1 ) 라이브러리 설치
pip install django-allauth
+ 설치된 라이브러리 확인
pip list
2) settings.py와 urls.py 수정
# settings.py
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
)
INSTALLED_APPS = [
# 카카오톡 소셜 로그인 관련 부분
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.kakao',
]
SITE_ID = 1
LOGIN_REDIRECT_URL = '/' # 로그인 후 리다이렉트 될 경로
ACCOUNT_LOGOUT_REDIRECT_URL = reverse_lazy('accountapp:login')
ACCOUNT_LOGOUT_ON_GET = True
# urls.py
urlpatterns = [
# 소셜로그인 관련 url
re_path(r'^accounts/', include('accountapp.urls')),
re_path(r'^accounts/', include('allauth.urls')),
]
3) DB Migrate
python manage.py makemigrations
python manage.py migrate
4) 서버 실행
python manage.py runserver
5) 관리자 페이지 : http://<본인 url>/admin
관리자 페이지에 들어가면 이런 부분이 자동으로 추가되어있습니다.
소셜 어플리케이션을 추가해줍니다.
- 제공자 : kakao
- 이름: 원하는 이름
- 클라이언트 아이디: 카카오 디벨로스에서 REST API 키
- 시크릿 키: 카카오톡은 시크릿키를 사용하지 않으므로 아무거나 입력해도 괜찮아요 !
- Sites: example.com을 선택
- example.com 만 선택해서 저장해도 작동이 잘 됩니다 !!
6) 템플릿에 추가
<!-- login.html -->
{% load socialaccount %}
<a href="{% provider_login_url 'kakao' method='oauth2' %}">
카카오톡 회원가입
</a>
3. 실수 / 오류
1) 관리자 창에서 '저장'버튼 클릭 -> CSRF 검증 오류
뒤로가기 후 다시 돌아와서 저장버튼을 클릭히였더니 문제가 해결되었습니다.
문제가 발생한 이유에 대해서 더 알아보고 추가하도록 하겠습니다.
2) allauth app을 만드는 실수
urls.py에서 allauth.urls를 지정하는 것을 보고 allauth앱을 만드는 실수를 하였습니다.
django startapp allauth
하지만 별도로 앱을 만들지 않아도 정상적으로 작동하는 것을 확인할 수 있었습니다.
3) KOE006 오류
카카오 디벨로퍼스에서 Redirect URI에
http://127.0.0.1:8000/accounts/kakao/login/callback/을 추가하였더니 문제가 해결되었습니다.
감사합니다 ~!