[REAL Python – Django] – “Django – django-allauth 사용법(구글 로그인) ”

[REAL Python – Django] – “Django – django-allauth 사용법(구글 로그인) ”

3월 30, 2022

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/ 에 등록하기

위의 링크로 이동해 아래의 과정을 수행합니다.

프로젝트 추가 버튼 클릭 후 프로젝트 이름을 정하고 ‘만들기’를 클릭해줍니다.
[OAuth 동의 화면] 으로 이동.
[외부] 를 선택해줍니다. 이후 [만들기] 클릭.
이후 앱 이름을 만들어준 후 저장, [사용자 인증 정보] 탭으로 이동해줍니다.
사용자 인증 정보 만들기 -> OAuth 클라이언트 ID 를 선택해줍니다.
정보를 입력해 줍니다.이후 나오는 정보를 저장해 둡니다.

관리자 페이지에서 사이트 수정하고 연결

위의 정보를 입력해줍니다.
이후 사이트에서 위에 설정했던 승인된 자바스크립트 원본 클릭 후 수정.
{% 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>&nbsp&nbsp 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 으로 리다이렉트될 곳을 설정할 수 있습니다.

느낀 것은 비교적 구글 로그인 하는 방식이 상당히 간단했던 것 같습니다. 같은 방법을 이용해서 카카오로 로그인하는 방법도 상세히 포스팅해 보도록 하겠습니다.

Leave A Comment

Avada Programmer

Hello! We are a group of skilled developers and programmers.

Hello! We are a group of skilled developers and programmers.

We have experience in working with different platforms, systems, and devices to create products that are compatible and accessible.