니르바나
2k
2021-04-13 15:17:19 작성 2021-04-13 15:18:07 수정됨
1
209

Django-allauth custom adapter를 활용하여 메일인증 유효기간 전달하기


django 기반의 회원가입 패키지를 통해서 회원가입을 구현하는 경우 회원가입 관련 페이지를 수정할 때 template폴더의 동일한 path로 파일을 생성해주면 자동으로 오버라이딩이 된다.

 

하지만 단순히 내용 변경이 아니라 예를들면 setting내부의 constant값이나 기존에는 제공되지 않던 context 정보가 필요하다면 어쩔수 없지 custom adapter를 만들어주어야 한다.

 

이부분은 검색을 해봐도 제대로 설명이 된 곳이 없어서,(심지어 공식문서에도 없었던것 같다. 물론 너무 상식적인것이라 그럴지도 모른다.)

직접 소스코드를 분석해서 구현했다.

 

일단

 

account_adapter를 default_adapter에서 다른 것으로 바꾸는 방법은 django-allauth 공식문서를 참고부탁한다. django setting 파일에서 설정이 가능하다.

 

위의 전제를 해결했다는 가정에 내 경우에는 계정 확인 메시지가 전달 될때에 몇일안에 링크를 눌러야하는지, 즉 몇일 이후 해당 인증 링크가 만료되는지에 대한 정보를 전달하고 싶었다.

기존의 계정 확인 메시지는 계정명과 계정 확인을 위한 링크만 이메일로 전달되었기에 언제까지 계정 확인을 마쳐야하는지 알수가 없었다.

 

따라서 추가적인 정보를 제공하기 위해서 CustomAccoutAdapter를 아래와같이 만들어주엇다.

 

from allauth.account.adapter import DefaultAccountAdapter, get_current_site, app_settings

class CustomAccountAdapter(DefaultAccountAdapter):

    def send_confirmation_mail(self, request, emailconfirmation, signup):
        current_site = get_current_site(request)
        activate_url = self.get_email_confirmation_url(request, emailconfirmation)
        ctx = {
            "user": emailconfirmation.email_address.user,
            "activate_url": activate_url,
            "current_site": current_site,
            "key": emailconfirmation.key,
            "expiration_days": app_settings.EMAIL_CONFIRMATION_EXPIRE_DAYS
        }
        if signup:
            email_template = "account/email/email_confirmation_signup"
        else:
            email_template = "account/email/email_confirmation"
        self.send_mail(email_template, emailconfirmation.email_address.email, ctx)

실제로 추가된 코드는 expiration_days와 관련된 내용 뿐이다.

이후 email_confirm 페이지에서 expiration_days를 활용하여 내용을 수정해주면된다.

블로그 글을 복붙해서 그런지 개행이 너무 크게 들어가네요. 블로그에서 직접 보고 싶으신분은 아래 링크 참고해주세요~ https://inspireworld.tistory.com/64



0