python - 在 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')
解决方案
推荐阅读
- mongodb - 如何在我的 Express 服务器中修复此更新方法以考虑 Mongoose 模式中的数组
- excel - 将用户表单文本框输入限制为 [H]:MM
- apache-kafka - 如何进行实时数据分析?
- python - 表格不保存
- stata - 使用 ciplot 将两个图合并到一个图中
- c# - System.EnterpriseServices.Wrapper.dll 中的“System.UnauthorizedAccessException”访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))
- gradle - 设置 Gradle 自定义任务输入和输出
- android - 数据发生变化时如何测试 MutableLiveData<>.observe?
- jquery - Tomcat - 使用正确的 JSESSIONID 进行 AJAX 调用
- sql - 当其他表中的日期比今天更早时更新列