장고 - SNS 네이버 로그인 기능 학습
django allauth 기능 사용
1. django-allauth 설치
pip install django-allauth
2. settings.py 수정
- 아이디, 이메일, 소셜 로그인 가능하도록 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
)
INSTALLED_APP = [
'django.contrib.sites',
# 소셜 로그인을 관리하기 위해 기본으로 생기는 앱들
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.naver',
SITE_ID = 1
# 로그인 후에 이동할 경로 추가
LOGIN_REDIRECT_URL = '/'
]
3. url 경로 지정
- 경로 : config > urls.py
1
2
3urlpatterns = [
path('accounts/', include('allauth.urls')),
]
4. migrate 실행
$ python manage.py migrate
5. 네이버 애플리케이션 등록
- 경로 : django allauth 사이트 > Providers > Naver > https://developers.naver.com/appinfo
- 애플리케이션 등록
- 애플리케이션 이름 작성
- 사용 API는 ‘네이버 아이디로 로그인’ 선택
- 필수 항목에 회원이름과 이메일만 체크 (나머지는 추가 항목으로 넣을 수 있다.)
- 환경은 PC 웹 선택하고 아래와 같이 URL 입력
- 서비스 URL : http://127.0.0.1 입력
- Callback URL : http://127.0.0.1:8000/accounts/naver/login/callback
- django-allauth 문서 홈페이지에서 providers 탭의 네이버 항목에 있다.
6. 서버 실행하여 관리자 사이트 접속
- Social application 추가
- 제공자 : Naver
- 이름 : 네이버 로그인
- 클라이언트 아이디 : 네이버 API 등록 시 발급되는 Client ID
- 비밀 키 : 네이버 API 등록 시 발급되는 Client Secret
- sites : example.com 선택
7. http://127.0.0.1:8000/accounts/login 접속하여 naver 누르고 로그인
- admin으로 접속되어 있다면 로그아웃
- base.html에 로그인/로그아웃 URL 추가
1
2
3
4
5
6
7
8
9<!--// base.html //-->
{% if user.is_authenticated %}
<!--//
django-allauth 문서 홈페이지/Views 탭에서 로그인, 로그아웃 URL 이름 확인
//-->
<a href="{% url 'account_logout' %}">Logout</a>
{% else %}
<a href="{% url 'account_login' %}">Login</a>
{% endif %}
8. 뷰 페이지에서 소셜 회원가입 함수 작성
- 경로 : bard > views.py
1
2
3
4
5
6
7
8
9
10
11from allauth.account.signals import user_signed_up
from allauth.socialaccount.models import SocialAccount
# 시그널이 발생했을 때 실행될 함수
def naver_signup(request, user, **kwargs):
social_user = SocialAccount.objects.filter(user=user)
if social_user.exists():
user.last_name = social_user[0].extra_data['name']
user.save()
# 시그널과 해당 함수를 connect
# 시그널 연결 방법 2가지 : receiver 쓰는 방법, connect 쓰는 방법
user_signed_up.connect(naver_signup)
Posted