[장고] allauth에서 소셜 계정으로 회원가입 시 is_active = True 설정하기

소요 시간: 5분

설정 추가하기

먼저, AUTHENTICATION_BACKENDS 설정을 통해 Allauth의 인증 백엔드를 추가합니다. 이는 Django가 사용자를 인증할 때 Allauth에서 제공하는 다양한 인증 방법(예: 소셜 로그인, 일반 로그인 등)을 사용할 수 있게 합니다. 구체적으로, 'allauth.account.auth_backends.AuthenticationBackend'를 포함시켜 Allauth의 인증 기능을 활성화합니다.

# settings.py
# allauth 기본 설정 생략

# 인증 백엔드 설정: Django가 사용자를 인증할 때 사용할 백엔드를 정의합니다.
# 여기서는 Allauth의 AuthenticationBackend를 추가하여 소셜 로그인 및 기타 인증 기능을 사용할 수 있도록 합니다.
AUTHENTICATION_BACKENDS = [
    ...
    'allauth.account.auth_backends.AuthenticationBackend',
    ...
]

이 설정을 통해 Django 프로젝트는 allauth 패키지의 인증 기능을 사용하여 소셜 로그인, 이메일 인증, 계정 관리 등의 기능을 구현할 수 있습니다.

추가적으로 allauth 패키지를 사용할 때는 몇 가지 다른 설정도 필요합니다. 예를 들어, 설치된 애플리케이션 리스트에 allauth 관련 애플리케이션들을 추가하고, URL 설정을 수정하는 등의 작업이 필요합니다. 이를 통해 allauth 패키지가 제대로 동작하도록 할 수 있습니다.


어댑터 커스터마이징

사용자 계정 저장 시 사용자 정의 로직을 추가하기 위해 어댑터를 커스터마이징합니다. 사용자가 가입할 때 계정을 활성화하고, provider 필드를 'kakao'로 설정하는 로직을 추가하겠습니다. 이를 통해 Kakao 소셜 로그인을 통해 가입한 사용자를 특별히 처리할 수 있습니다.

accounts 앱에서 adapters.py 파일을 생성하고 아래 코드를 입력합니다.

from allauth.account.adapter import DefaultAccountAdapter

class CustomDefaultAccountAdapter(DefaultAccountAdapter):
    
    def save_user(self, request, user, form, commit=True):
        user = super().save_user(request, user, form, commit=False)
        user.is_active = True
        user.provider = 'kakao'
        user.save()
        return user

어댑터를 커스터마이징 하려면 우선 DefaultAccountAdapter 클래스를 상속받아 사용자 정의 어댑터 클래스를 생성합니다. 그리고 save_user 메서드를 오버라이드하면 어렵지 않게 로직을 커스터마이징할 수 있습니다.

오버라이드는 가장 먼저, 부모 클래스의 save_user 메서드를 호출하여 기본 사용자 저장 로직을 수행하는데 여기서는 commit=False로 설정하여 즉시 저장하지 않도록 합니다.

그 다음 사용자의 is_active 필드를 True로 설정하여 계정을 활성화합니다.

user.save() 메서드를 호출해 사용자 객체를 데이터베이스에 저장하고 return user로 수정된 사용자 객체를 반환합니다.

이 사용자 정의 어댑터를 사용하려면, settings.py 파일에서 ACCOUNT_ADAPTER 설정을 추가하여 이 어댑터를 사용하도록 해야 합니다.

# settings.py
ACCOUNT_ADAPTER = 'accounts.adapters.CustomDefaultAccountAdapter'

이렇게 설정하면 allauth는 사용자 계정을 생성하거나 업데이트할 때 CustomDefaultAccountAdapter를 사용하게 됩니다.

참고로 is_active 외에도 다른 로직을 추가할 수 있습니다. 가령 소셜 계정 수단을 기록하고 싶다면 아래와 같이 코드를 추가합니다.

from allauth.account.adapter import DefaultAccountAdapter

class CustomDefaultAccountAdapter(DefaultAccountAdapter):
    
    def save_user(self, request, user, form, commit=True):
        user = super().save_user(request, user, form, commit=False)
        user.is_active = True
        user.provider = 'kakao' # 추가
        user.save()
        return user


장고 리스트