В настоящее время у меня есть следующая форма регистрации в моем приложении django, и у меня возникают проблемы при попытке перезагрузить страницу регистрации, то есть всякий раз, когда пользователь вводит неверное имя пользователя, адрес электронной почты или пароль, он / она получает сообщение об ошибке, но затем, если он / она вводит правильное имя пользователя, адрес электронной почты и пароль, я сталкиваюсь с 403 Forbidden CSRF verification failed. Request aborted.
Я полагаю, это происходит потому, что маркер перед сеансом создается, когда пользователь неправильно вводит неверные учетные данные регистрации и когда новые учетные данные затем введите несоответствие между новыми данными и содержимым csrf_token, поэтому я думаю, что мне нужно уничтожить ранее созданный csrf_token и создать новый (пожалуйста, исправьте меня, если я ошибаюсь, поскольку большая часть этого материала для меня относительно новая).
views.py
from django.shortcuts import render, redirect, render_to_response
from .forms import UserRegisterForm
from django.contrib import messages
def register(request):
form = UserRegisterForm(request.POST)
if request.method == 'POST':
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Your account {username} has been successfully created!')
return redirect('login')
else:
# display the errors when trying to submit your request
return render_to_response('accounts/register.html', {'form':form})
elif request.method == 'GET':
form = UserRegisterForm()
return render(request, 'accounts/register.html', {'form': form})
# register.html
{% block content %}
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
{% load static %}
<div class="container">
<form method="POST"> {% csrf_token %}
<div class="wrap-login">
<div class="bar" >
Email * <br />
{{form.email}}
</div>
<br />
<div class="bar">
Username * <br />
{{form.username}}
</div>
<br />
<div class="bar">
Password * <br />
{{form.password1}}
</div>
<br />
<div class="bar">
Password confirmation * <br />
{{form.password2}}
</div>
<br />
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Sign Up</button>
</div>
<small class="text-muted">
Already have an account?<a class="ml-2" href="/login">Log In</a>
</small>
</div>
</form>
Как мне уничтожить предыдущий csrf_token и создать новый? Напомним, что если пользователь вводит правильные учетные данные и затем пытается войти в систему, этот процесс проходит гладко.
Любая помощь или вклад в решение этой проблемы будет принята с благодарностью.