首页 > 解决方案 > 在 django 中通过电子邮件验证帐户验证失败

问题描述

我在view.py中创建了两个类来实现账号注册和验证。这是我的想法。 当用户注册时,django 会向用户的 gmail 发送一个 active_link,现在 user.is_active = False。点击后 user.is_active = True 并且帐户验证成功情况是我的 gmail 获得了 aitive_link,但单击链接后 User.objects 仍然等于 False。因此帐户验证失败

这是我的注册课程。

class RegistrationView(View):
def get(self, request):
    return render(request, 'authentication/register.html')

def post(self, request):

    username = request.POST['username']
    email = request.POST['email']
    password = request.POST['password']

    context = {
        'fieldValues': request.POST
    }

    if not User.objects.filter(username=username).exists():
        if not User.objects.filter(email=email).exists():
            if len(password) < 8:
                messages.error(request, '密码不会8位都没吧,不会吧')
                return render(request, 'authentication/register.html', context)

            user = User.objects.create_user(username=username, email=email)
            user.set_password(password)
            user.is_active = False
            user.save()

            uidb64 = urlsafe_base64_encode(force_bytes(user.pk))
            domain = get_current_site(request).domain
            link = reverse('activate', kwargs={'uidb64': uidb64,'token': account_activation_token.make_token(user)})

            activate_url = 'http://' + domain + link
            email_body = 'Hi ' + user.username + ' 没时间解释了快点链接认证账户\n' + activate_url

            email_subject = '激活你的邮箱'

            email = EmailMessage(
                email_subject,
                email_body,
                'noreply@gmail.com',
                [email],
            )
            email.send(fail_silently=False)
            messages.success(request, '邮箱验证完这帐户就是他娘你的了')
            return render(request, 'authentication/register.html')

    return render(request, 'authentication/register.html')

这是我的验证课。

class VerificationView(View):
def get(self, request, uidb64, token):
    try:
        id = force_text(urlsafe_base64_decode(uidb64))
        user = User.objects.get(pk=id)

        if not account_activation_token.check_token(user, token):
            return redirect('login'+'?message='+'User already activated')

        if user.is_active:
            return redirect('login')
        user.is_active = True
        user.save()

        messages.success(request, '账户创建成功')
        return redirect('login')
    except Exception as ex:
        pass

    return redirect('login')

标签: pythondjango

解决方案


推荐阅读