URL подтверждения электронной почты Django с параметром токена - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь создать проверку подлинности электронной почты, но не могу получить доступ к этому URL

127.0.0.1:8000/activate/d34324/KYJsqYMoV5DJ0vewSBdC9KZlZtnOAU7KE

Как я могу создать правильные маршруты для этого кода?

urls.py

url(r'^logout/$', OwnerRegister.logout_view),
url(r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',OwnerRegister.activate,name='activate'),

views.py

class OwnerRegister(TemplateView):
    template_name = "owner_register.html"

    def get_context_data(self, * args, ** kwargs):
        context = super(OwnerRegister, self).get_context_data()
        return context

    def logout_view(request):
        logout(request)
        return HttpResponseRedirect("/")

    def activate(request, uidb64, token):
        try:
            print('\n\n request',request)

            user_id = request.GET.get('uid')
            token = request.GET.get('token')
            user = User.objects.get(username=user_id)
            profile = OwnerInfo.objects.get(user=user)
            print(user.date_joined)

            if profile.confirmation_code == token and user.date_joined > (datetime.datetime.now()-datetime.timedelta(days=1)):
                print("test")
                user.is_active = True
                user.save()

                user.backend='django.contrib.auth.backends.ModelBackend' 
                auth_login(request,user)
                return HttpResponseRedirect('You have activated this account')
        except:
            return HttpResponseRedirect('')


def send_registration_confirmation(self,user,request):
    p = OwnerInfo.objects.get(user=user)
    current_site = get_current_site(request)
    content = current_site.domain+"/activate" +  user.username + "/" + str(p.confirmation_code) 
    send_mail("Email Verify", content, 'no-reply@gsick.com', [user.email], fail_silently=False)

1 Ответ

0 голосов
/ 03 сентября 2018

Несмотря на любые другие проблемы, которые могут возникнуть в вашем коде, похоже, что есть проблема с объявлением шаблона URL. В частности, шаблон URL указывает следующее регулярное выражение для именованного параметра token и косой черты:

(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/

Строка, переданная как token в URL-адресе , не соответствует этому регулярному выражению , поскольку в ней отсутствует дефис после тринадцатого символа.

Ваш URL также не имеет косой черты. Это хорошо, если включена опция APPEND_SLASH в Django ( поведение по умолчанию ), что заставит Django автоматически выполнить перенаправление, чтобы добавить косую черту, если ни один шаблон URL не найден без такового.

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

...