장고 - 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
    18
    AUTHENTICATION_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
    3
    urlpatterns = [
    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
    11
    from 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)