본문 바로가기

프로그래밍/Django

[Django] Django-allauth를 통한 페이스북 회원가입 및 로그인

페이스북 회원가입

Django-allauth을 활용한 페이스북 회원가입(로그인)

http://django-allauth.readthedocs.io/en/latest/installation.html

라이브러리 활용이 전무해서 처음에 좀 애먹었다. 우선 첫 환경세팅은 공식홈페이지를 보고 따라하는 것이 가정 정확하고 빠르다.

설치하기

pip install django-allauth

settings.py
세 부분을 건들여줘야 한다. (INSTALLED_APPS, TEMPLATES, AUTHENTICATION_BACKENDS) INSTALLED_APPS에는 추가해야 할 앱들이 많기 때문에, +=를 활용해 아래칸에 따로 만들어줬다.

INSTALLED_APPS += [ 
    # The following apps are required: 
    'django.contrib.sites', 
 
    'allauth', 
    'allauth.account', 
    'allauth.socialaccount', 
 
    # ... include the providers you want to enable: 
    'allauth.socialaccount.providers.facebook', 
]
 
# Specify the context processors as follows: 
TEMPLATES = [ 
    { 
        'BACKEND': 'django.template.backends.django.DjangoTemplates', 
        'DIRS': [], 
        'APP_DIRS': True, 
        'OPTIONS': { 
            'context_processors': [ 
                # Already defined Django-related contexts here 
 
                # `allauth` needs this from django 
                'django.template.context_processors.request', 
            ], 
        }, 
    }, 
]
 
AUTHENTICATION_BACKENDS = (
    ...
    # Needed to login by username in Django admin, regardless of `allauth` 
    'django.contrib.auth.backends.ModelBackend',
 
    # `allauth` specific authentication methods, such as login by e-mail 
    'allauth.account.auth_backends.AuthenticationBackend',
    ...
)

만약, 리다이렉트 URL을 설정하고 싶다면 settings.py에 하단 내용을 추가한다.

ACCOUNT_AUTHENTICATED_LOGIN_REDIRECTS = True
LOGIN_REDIRECT_URL = "/"
ACCOUNT_AUTHENTICATED_LOGOUT_REDIRECTS = True
ACCOUNT_LOGOUT_REDIRECT_URL = "/"

urls.py

urlpatterns = [ 
    ...
    url(r'^accounts/'include('allauth.urls')), 
    ...
]

여기까지 진행했다면 기본 환경세팅이 끝났다. runserver 후에 localhost:8000/accounts/로 접속해보면 다양한 URL 경로들이 생긴 것을 확인할 수 있다.

페이스북 APP ID, 시크릿 키 등록하기

우선, 페이스북 APP을 생성했고 ID와 시크릿키를 이미 알고있다는 전제하에 다음 내용을 작성하고자 한다. 만약 등록하지 않았다면 https://developers.facebook.com/apps/ 에 들어가 앱 등록을 한다.

admin 사이트 접속하기
스크린샷, 2017-07-20 20-26-20
admin에 접속하면 우리가 INSTALLED_APPS에 등록한 django.contrib.site을 통해서 소셜 앱들을 관리할 수 있게 되었다. 여기서 소셜 계정 - 소셜 애플리케이션에 들어간다.

스크린샷, 2017-07-20 20-26-56
소셜 어플리케이션 버튼을 눌러 해당 화면으로 들어온다. 여기서 이름은 마음대로 기입하고, 발급받은 APP ID와 시크릿 키를 기입한다. Sites에는 우리의 홈페이지 URL을 넣어준다.

링크 url 만들기

스크린샷, 2017-07-20 20-23-55
우리가 위에서 살펴본 URL 목록들이 있다. 여기서 라이브러리가 구성해놓은 기능들을 마음대로 쓸 수 있다. 거창하게 꾸미지 않고, 간단하게 링크로만 HTML을 구성해보자.

{% load socialaccount %}
<body>
 
    <h1>hello world</h1>
    {% if user.is_authenticated %}
    <span>{{ user }}님이 로그인중입니다.</span>
 
    {% for account in user.socialaccount_set.all %}
 
     {% comment %} show avatar from url {% endcomment %}
     <h2 style="text-transform:capitalize;">{{ account.provider }} account data</h2>
 
     <p><img width="50" height="50" src="{{ account.get_avatar_url }}"/></p>
 
     <p>UID: <a href="{{ account.extra_data.link }}">{{ account.uid }}</a></p>
 
     <p>Username: {{ account.extra_data.username }}</p>
      <p>First Name: {{ account.extra_data.first_name }}</p>
      <p>Last Name: {{ account.extra_data.last_name }}</p>
 
      <p>Dashboard Link:
      <a href="{{ account.extra_data.link }}">{{ account.extra_data.link }}</a></p>
      {% empty %}
      <p>you haven't any social account please</p>
    {% endfor %}
 
 
    {% endif %}
    <h2><a href="/accounts/login">로그인</a></h2>
    <h2><a href="{% provider_login_url 'facebook' method='oauth2' %}">페이스북 로그인</a></h2>
    <h2><a href="/accounts/logout">로그아웃</a></h2>
    <h2><a href="/accounts/signup">회원가입</a></h2>
 
</body>

우리가 살펴볼 것은 페이스북이다. 페이스북 로그인을 이용하기 위해서는
{% provider_login_url 'facebook'}이라는 라이브러리가 제공하는 태그를 활용할 수 있는데, 꼭 HTML 상단에 {% load socialaccount %}을 붙여줘야 한다.

최종화면

스크린샷, 2017-07-20 20-45-01

가장 빠르게 django-allauth를 만나보았다. 내가 가장 해맸던 부분은 템플릿 내에서 URL 링크를 정해주는 것이었다.

urlpatterns = [ 
    ...
    url(r'^accounts/'include('allauth.urls')), 
    ...
]

처음에 시키는대로 urls.py에 위 ^accounts/라는 내용을 추가했어도, 회원가입 페이지, 로그인 페이지, 로그인 완료 페이지를 내가 직접 구성해야 되는 줄 알았다. 보니까 urls.py에 추가하는 것만으로 저렇게 많은 URL을 활용할 수 있다는 것이었다.

두번째 난관은 provider라는 개념이었다. 맨 처음 라이브러리를 이용하는 거였기 때문에, 처음 보는 용어들에 대한 두려움이 있었다.

맨 처음 allauth를 설치할 때, INSTALLED_APPS에 추가하는 'allauth.socialaccount.providers.facebook'는 내용이 있다. 내용인즉슨, OAuth인증을 통해 인증된 고객에게만 우리의 서비스를 제공하는 것이다. 인증을 제공하는 업체가 바로 facebook인 것이고, 이러한 서비스 업체들을 통틀어 provider라고 지칭한다.

이를 통해서 회원가입도 즉시 반영되는데, sqlite3를 켜보면 신기하게도 페이스북 가입 유저를 받고 있는 것을 볼 수 있다.

해당 내용은 아직 공부중이기에 오류가 있을 수도 있고, 이러한 부분은 꼬집어주시면 좋겠다. 따라서 자세한 설명은 할 수 없지만 하단부에 관련 내용을 추가하도록 하겠다.

읽어보면 좋을 것

  1. django-allauth 공식 라이브러리
    http://django-allauth.readthedocs.io/en/latest/installation.html

  2. OAuth와 함께 춤을