Письмо активации учетной записи пользователя - протокол повторяется дважды (django)

В этом сценарии я хочу, чтобы пользователь получил электронное письмо для активации своего аккаунта.

В этом письме будет содержаться ссылка, на которую нужно будет перейти для получения ссылки активации.

По какой-то причине протокол "https://" повторяется в письме дважды.

В этом случае код отображает: "https://https://sitename.com/..."

Однако я не сталкиваюсь с этой проблемой, когда запускаю код на своем локальном хосте.

Я использую Django и развертываю на Heroku (на всякий случай, если это имеет значение).

Вот код.

Я попробовал переписать представления, в которых обрабатывается протокол:

"protocol": 'https' if request.is_secure() else 'http' 
#to 
"protocol": '' if request.is_secure() else 'http

'

но безуспешно, протокол по-прежнему повторяется дважды.

Шаблон

{% autoescape off %}
Hi,

Please click on the link below to confirm your registration:

{{ protocol }}://{{ domain }}{% url 'activate' uidb64=uid token=token %}
{% endautoescape %}

просмотров

def activate(request, uidb64, token):
    User = get_user_model()
    try:
        uid = force_str(urlsafe_base64_decode(uidb64))
        user = User.objects.get(pk=uid)
    except:
        user = None
    if user is not None and account_activation_token.check_token(user, token):
        user.is_active = True
        user.save()
        messages.success(request, "Thank you for your email confirmation. Now you can log in your account.")
        return redirect('home')
    else:
        messages.error(request,"Activation link is invalid")   
    return redirect('home')

def activateEmail(request, user, to_email):
    mail_subject = "Activate your user account"
    message = render_to_string("main/template_activate_account.html", {
        'user': user.username,
        'domain': get_current_site(request).domain,
        'uid': urlsafe_base64_encode(force_bytes(user.pk)),
        'token': account_activation_token.make_token(user),
        "protocol": 'https' if request.is_secure() else 'http'
    })
    email = EmailMessage(mail_subject, message, to=[to_email])
    if email.send():
        messages.success(request,f'Dear <b>(new_user)</b>, please go to your email<b>(to_email)</b> inbox and click on \ recieved activation link to confirm and complete the registration. <b>Note:</b>Check your spam folder.')
    else:
        messages.error(request, f'Problem sending email to {to_email}, check if you typed it correctly.')

def register_user(request):
    if request.method == "POST":
        form = RegisterForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active=False
            user.save()
            user = authenticate(username = form.cleaned_data['username'],
                                password = form.cleaned_data['password1'],)
            login(request,user)
            activateEmail(request, user, form.cleaned_data.get('email'))
            return redirect('home')
        else:
            for error in list(form.errors.values()):
                messages.error(request, error)
    else:
        form = RegisterForm()
    return render(request,'main/registration/register_user.html',{'form':form})

settings

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_FROM = 'XX'
EMAIL_HOST_USER = 'XX'
EMAIL_HOST_PASSWORD = 'XX'
EMAIL_PORT = 587
EMAIL_USE_TLS= True

PASSWORD_RESET_TIMEOUT = 14400

tokens.py

from django.contrib.auth.tokens import PasswordResetTokenGenerator
import six

class AccountActivationTokenGenerator(PasswordResetTokenGenerator):
    def _make_hash_value(self, user, timestamp):
        return(
            six.text_type(user.pk)+ six.text_type(timestamp) + six.text_type(user.is_active)
        )
        
account_activation_token=AccountActivationTokenGenerator()
Вернуться на верх