78 Django 소셜로그인 - NAVER LOGIN
78.1 소셜로그인 장고 설정 - allauth
소셜로그인을 쉽게 할수 있는 라이브러리 몇개 있지만
꾸준히 관리되고 업데이트 되는 allauth 라이브러리를 이용하겠습니다.
좋은 라이브러리들은 쉽게 사용할 수 있기도 하지만
특징은 가이드 문서가 길다는 단점이 있습니다.
파이썬블로그(pythonblog.co.kr)는 일반 로그인은 하지 않고 소셜로그인(네이버,카카오,구글 등) 만 적용할 생각입니다.
이번글은 우선 간단하게 로그인 구현만 먼저하고
다음글에 로그인 된 정보를 이용하여 댓글 기능을 만들도록 하겠습니다.
76 Django CBV 댓글 기능 - Ajax 등록
77 Django CBV 댓글기능-Ajax 수정/삭제
78 Django 소셜로그인 - NAVER LOGIN
79 Django 소셜로그인 인증활용하여 댓글기능 만들기
78.2 allauth 셋팅하기 - base.py
base.py에 allauth 사용하기 위해 설정정보를 입력합니다.
allauth 공식문서를 통해 자세한 내용을 확인 할 수 있습니다.
allauth 설치가이드: https://django-allauth.readthedocs.io/en/latest/installation.html
pip install django-allauth
- 현재 설치되는 allauth 버전은 0.51.0 입니다.
#sttings.py
SITE_ID = 1
DJANGO_BASE_APP = [
...
...
...
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.naver',
]
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
]
SOCIALACCOUNT_PROVIDERS = {
'naver': {'APP': {
'client_id': 'xxxxxxxxxxxxxxxxxxxxxxxxx',
'secret': 'xxxxxxxxxxx',
'key': ''
}},
}
LOGIN_REDIRECT_URL = '/' # social login redirect
ACCOUNT_LOGOUT_REDIRECT_URL = '/' # logout redirect
...
...
- allauth.socialaccount.providers.naver : 네이버 사용
1)사용가능 소셜로그인 리스트 - AUTHENTICATION_BACKENDS : 백앤드에서 인증처리 관련
-
SOCIALACCOUNT_PROVIDERS
1) 소셜 로그인에 필요한 client_id와 secret 를 입력합니다.
2) 네이버로그인 client_id와 secret는 네이버개발자센터에서 신청해야 합니다.
3) 네이버 개발자센터 가입후 네이버로그인 API를 신청시 콜백url을 입력해야 합니다.
4) 네이버 로그인 Callbak URL: http://localhost:8000/accounts/naver/login/callback/
5) 등록이 완료되면 Client ID, Client Secret을 확인할 수 있습니다. -
LOGIN_REDIRECT_URL : 소셜로그인 인증이 완료된 이름 돌아갈 페이지
- ACCOUNT_LOGOUT_REDIRECT_URL : 로그아웃 이후 돌아갈 페이지
78.3 accounts 경로 설정 - urls.py
78.4 allauth 테이블 생성- migrate
migrate 명령어로 allauth 관련 모델을 생성합니다.
python manage.py migrate
- migrate가 완료되었으면 이제 server를 실행합니다.
python manage.py runserver
78.5 소셜로그인 버튼 만들기
소셜로그인이 성공하면 메인(LOGIN_REDIRECT_URL)으로 오도록 설정하였으니
로그인 테스트하기위해 메인화면에 로그인 및 로그아웃 버튼을 추가합니다.
index.html
...
...
{% comment %} start social {% endcomment %}
{% load socialaccount %}
<div>
{% if user.is_authenticated %}
<a href="/accounts/logout" type="button" class="h1">Logout</a>
{% else %}
<a href="{% provider_login_url 'naver'%}"> NAVER Social Login</a>
{% endif %}
</div>
{% comment %} end social {% endcomment %}
...
...
- user.is_authenticated : 로그인 성공여부
- provider_login_url : provider_login_url 에 naver를 바인딩 합니다.
78.6 네이버 소셜로그인 하기
NAVER Social Login을 클릭하면 위 스샷과 같이
로그인 진행 페이지로 이동됩니다.
Naver을 통한 로그인
서드파티 Naver의 계정을 사용해 로그인을 진행하려 합니다.
계속 버튼을 클릭하면
네이버로그인 및 제공항목 동의 페이지로 이동됩니다.
네이버 로그인을 성공하여 Logout이 표시되었습니다.
78.7 로그인 데이터 확인
socialaccount_socialaccount 테이블에 로그인정보가 들어있음을 확인할 수 있습니다.
로그인 성공할때 view.py request 에서 유저정보가 없네요..
어디서 받아야 할지 allauth 문서를 찾아봐야겠습니다.
잘 보고 갑니다. ^^