I implemented the email authentication function using dj rest auth, but it worked fine locally, but when I deployed it, the authentication email URL came out strangely. I registered my backend domain in admin's site>site.
this is my settings.py
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.gmail.com"
EMAIL_PORT = "587"
EMAIL_HOST_USER = "[email protected]"
EMAIL_HOST_PASSWORD = "app_password"
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
STATIC_URL = "/static/"
ACCOUNT_CONFIRM_EMAIL_ON_GET = True
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = (
"/"
)
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 1
ACCOUNT_EMAIL_SUBJECT_PREFIX = "WowYouToo"
and this is my accounts/views.py
class ConfirmEmailView(APIView):
permission_classes = [AllowAny]
def get(self, *args, **kwargs):
self.object = confirmation = self.get_object()
confirmation.confirm(self.request)
return HttpResponseRedirect("accounts/")
def get_object(self, queryset=None):
key = self.kwargs["key"]
email_confirmation = EmailConfirmationHMAC.from_key(key)
if not email_confirmation:
if queryset is None:
queryset = self.get_queryset()
try:
email_confirmation = queryset.get(key=key.lower())
except EmailConfirmation.DoesNotExist:
return HttpResponseRedirect("accounts/")
return email_confirmation
def get_queryset(self):
qs = EmailConfirmation.objects.all_valid()
qs = qs.select_related("email_address__user")
return qs
class CustomRegisterView(RegisterView):
serializer_class = CustomRegisterSerializer
permission_classes = [permissions.AllowAny]
class CustomTokenObtainPairView(TokenObtainPairView):
serializer_class = CustomTokenObtainPairSerializer
the url in verification email is 'http://backend/accounts/confirm-email/Mzk:1r99pa:fG8rVgPl5q4WBQzs3saCYGKeVsquqwlvcFtwPvys3Wg/'
I tried to add URL_FRONT in settings.py and changed every HttpResponseRedirect urls...I also changed domain using shell but that 'http://backend/' never changed.
Make sure you have proper site app entries for prod environment. dj-rest-auth uses this to generate the absolute url in your emails (via django-allauth).
code ref: https://github.com/pennersr/django-allauth/blob/df41f2866a66b792a0e27611250cfd500fa956e2/allauth/utils.py#L252