[REAL Python – Django] – “Django – django-allauth 사용법(구글 로그인) ”
[REAL Python – Django] – “Django – django-allauth 사용법(구글 로그인) ”
django-allauth
라이브러리 설치
pip install django-allauth
위의 명령어를 터미널에 입력하여 라이브러리를 설치할 수 있습니다.
https://django-allauth.readthedocs.io/en/latest/index.html 은 해당 라이브러리의 공식 문서인데, 파이썬 버전이나 장고의 버전을 잘 확인하고 설치를 진행하는 것이 좋겠습니다.
https://django-allauth.readthedocs.io/en/latest/installation.html 에는 설치 방법과 이후에 해야 할 것들이 잘 나와 있습니다. 문서 그대로 settings.py
에 앱을 등록해 줍니다.
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',
위의 3줄은 꼭 있어야 하는 코드, 아래의 한 줄은 로그인을 원하는 외부 소셜 서비스를 정해서 작성해주면 됩니다.
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', # 이 코드 추가!
# 'allauth'와 상관없이 Django admin에서 사용자 이름으로 로그인해야 함
#'django.contrib.auth.backends.ModelBackend',
# 'allauth' 이메일 로그인과 같은 특정 인증 방법
# 'allauth.account.auth_backends.AuthenticationBackend',
...
]
SITE_ID = 1
ACCOUNT_EMAIL_REQUIRED = True # 계정 이메일이 필요한가?
ACCOUNT_EMAIL_VERIFICATION = 'none' # 이메일 검증 과정이 필요한가?
공식 문서나 주석이 참 친절하네요. 위의 설정을 추가해 줄 겁니다.
urlpatterns = [
path('blog/', include('blog.urls')), # blog/로 접근하면, blog.urls 파일을 참고해라!
path('admin/', admin.site.urls),
path('markdownx/', include('markdownx.urls')),
path('accounts/', include('allauth.urls')), # 이 줄 추가!
]
urls.py
의 부분에 맨 아랫쪽의 urlpatterns
를 추가해줍니다. 이후 마이그레이션.
https://console.developers.google.com/
에 등록하기
위의 링크로 이동해 아래의 과정을 수행합니다.
관리자 페이지에서 사이트 수정하고 연결
{% load socialaccount %} # 템플릿에 삽입
<a role="button" class="btn btn-outline-dark btn-block btn-sm"
href="{% provider_login_url 'google' %}">
<i class="fab fa-google"></i>   Log in with Google
</a>
관련된 템플릿 태그를 사용하기 위해서 {% load socialaccount %}
를 해 줍니다. 이후 아래에서 원하는 곳에 href="{% provider_login_url 'google' %}"
코드를 추가해 줍니다.
@register.tag
def provider_login_url(parser, token):
"""
{% provider_login_url "facebook" next=bla %}
{% provider_login_url "openid" openid="http://me.yahoo.com" next=bla %}
"""
bits = token.split_contents()
provider_id = bits[1]
params = token_kwargs(bits[2:], parser, support_legacy=False)
return ProviderLoginURLNode(provider_id, params)
이것은 {% load socialaccount %}
로 추가했던 socialaccount.py
원본입니다. 주석으로 템플릿에서 그것을 어떻게 사용하는지 알려주고 있네요.
이제 관리자 페이지에서 Add social application
을 해 주어야 합니다.
settings.py
에서 리다이렉트 설정
SITE_ID = 1
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'none'
LOGIN_REDIRECT_URL = '/blog/' # 이 코드 추가
settings.py
에서 LOGIN_REDIRECT_URL
으로 리다이렉트될 곳을 설정할 수 있습니다.
느낀 것은 비교적 구글 로그인 하는 방식이 상당히 간단했던 것 같습니다. 같은 방법을 이용해서 카카오로 로그인하는 방법도 상세히 포스팅해 보도록 하겠습니다.