Django Social Login(Google OAuth2)
by EunHye Jung
참고1
참조2
생활코딩(구글API를 통해서 배우는 인증)
Social-Auth-App-Django
Social-Auth-App-Django는 오픈소스 파이썬 모듈이다.
사용자 등록 및 로그인을 소셜 사이트 인증을 통해 제공해준다.
필요한 라이브러리 설치
장고 프로젝트에서 pip를 통해 social-auth-app-django를 설치.
pip install social-auth-app-django
그리고 나서 social_django
를 setting.py파일에서 INSTALLED_APP 목록에 추가해주고,
다음 명렁어를 통해 데이터베이스를 migrate 해준다.
settin.py
INSTALLED_APPS = [
...
'socal_django'
]
python manage.py migrate
migrate 후에 amdin페이지를 방문하면, SOCAIL_DJANGO 앱이 생성되어있는걸 확인할 수 있다.
AUTHENTICATION_BACKENDS 설정 추가
setting.py
파일에 아래와 같이 AUTHENTICATION_BACKENDS 설정을 추가해주자.
setting.py
AUTHENTICATION_BACKENDS = [
'social_core.backends.google.GoogleOAuth2',
'django.contrib.auth.backends.ModelBackend',
]
Google OAuth2 Credentials 획득
-
소셜 로그인을 사용하려면 Google에서는
Google+API
활성화하고,OAuth2.0 클라이언트 ID
를 ‘웹 애플리케이션’으로 생성해 API Key/Secret을 발급받아야한다.
Google Developer Console 페이지에서 프로젝트를 생성하고, API Key/Secret을 발급받자.
(Google Login은 Google+API에 연결되어있다.) -
발급받은 API Key/Secret 값을 setting.py에 아래와 같이 넣어주자.
setting.py
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '발급받은 KEY' SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '발급받은 SECRET'
로그인, 로그인 후 리다이렉트 시킬 URL 설정
-
추가적으로
LOGIN_URL
과LOGIN_REDIRECT_URL
,LOGOUT_REDIRECT_URL
설정을 해준다.
social-app-django는 LOGIN_URL 키를 사용하여, 사용자를 Google 인증 페이지로 리다이렉션한다.
LOGIN_REDIRECT_URL과 LOGOUT_REDIRECT_URL 값은 사용자가 로그인하거나 로그아웃할때 설정된 곳으로 리다이렉트된다.setting.py
LOGIN_URL = '/' LOGIN_REDIRECT_URL = '/' # 로그인 후 redierct 시킬곳
URL 매핑을 위하여 NAME_SPACE도 추가.
setting.py
SOCIAL_AUTH_URL_NAMESPACE = 'social'
-
urls.py
파일을 열어 소셜 로그인과 로그아웃 url을 추가해준다.
참고한 사이트에서는from django.contrib.auth.views import logout
를 사용하였는데 django 2.1버전부터는from django.contrib.auth import logout
을 사용하는것으로 변경된듯.
참고authentication/urls.py
from django.urls import path, include from . import views from django.contrib.auth import logout urlpatterns = [ path('', include('social_django.urls', namespace='social')), path('logout/', views.logout, name='logout') ]
로그인, 로그아웃 버튼 html 코드
{% if user.is_authenticated %}
<p>Logged as {{ user.username }}</p>
<a class="btn btn-primary" href="{% url 'logout' %}">Logout</a>
{% else %}
<a class="btn btn-primary" href="{% url 'social:begin' 'google-oauth2' %}">
Login
</a>
{% endif %}
Subscribe via RSS