Проверка CSRF не прошла с ошибкой 403 при развертывании на AWS elastic beanstalk
После создания проекта Django в локальной версии, где мы проверили, что все функции работают так, как ожидалось, мы наконец развернули его в Amazon Web Services Beanstalk. Но, к нашему ужасу, производственное приложение показало ошибку CSRF, которая никогда не наблюдалась на этапе разработки.
Вот пример кода:
models.py
class CustomerAccount(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
phone_number = models.CharField(max_length=50,blank=True)
first_name = models.CharField(max_length=200, null=True,blank=True)
last_name = models.CharField(max_length=200, null=True,blank=True)
urls.py
urlpatterns = [
path('', views.index, name='customer-index'),
]
views.py
@login_required(login_url="/login/")
def index(request):
if request.method == 'POST':
form = CustomerForm(request.POST)
if form.is_valid():
form.save()
return redirect('customers:customer-index')
else:
form = CustomerForm()
context= {
'form': form,
}
return render(request, 'customers/index.html', context)
index.html
<div class="col-md-4">
<div class="card p-3 mb-4 mx-2">
<h3 class="text-center">New Customer</h3>
<hr>
<form method="POST" action="{% url 'customers:customer-index' %}">
{% csrf_token %}
{{ form|crispy }}
<input class="btn btn-success btn-block" type="submit" value="Add Customer">
</form>
</div>
</div>
Дополнительные сведения о нашей конфигурации:
- Внутри settings.py добавлено промежуточное ПО для CSRF .
MIDDLEWARE = [
...
'django.middleware.csrf.CsrfViewMiddleware',
...
]
Хотя мы рассмотрели некоторые решения, которые мы смогли найти, такие как
- добавление
@csrf_exempt
перед функцией views - установка
csrf token age
наNone
- добавили атрибут action в тег формы
но несмотря на все эти усилия, beanstalk все еще показывает ту же ошибку.
Некоторые вещи, которые мы заметили в этой ошибке:
- Проблема csrf автоматически решается периодически через некоторое время.
- Шаблоны для некоторых представлений имеют старый/предыдущий id и не имеют обновленного значения первичного ключа, когда объекты с одинаковыми данными добавляются один за другим.