django пользователь не может залогиниться Forbidden (CSRF cookie not set.): /users/login/
Создал проект. На локалке работает без проблем, но при размещении на удаленном хосте, возникла проблема при входе для пользователей. Появилась ошибка:
Forbidden (CSRF cookie not set.): /admin/login/.
Ошибка не стабильная, при первом входе появляется на всех устройствах. В дальнейшем, где-то остается, где-то все работает нормально.
login.html
<form method="post">
{% csrf_token %}
<div class="form-error">{{ form.non_field_errors }}</div>
{% for f in form %}
<p><label class="form-label" for="{{ f.id_for_label }}">{{f.label}}: </label>{{ f }}</p>
<div class="form-error">{{ f.errors }}</div>
{% endfor %}
<p><button type="submit">Войти</button></p>
<p><a href="{% url 'users:password_reset' %}">Забыли пароль?</a></p>
</form>
view.py
class LoginUser(LoginView):
form_class = LoginUserForm
template_name = 'users/login.html'
extra_context = {'title': 'Авторизация'}
def get_success_url(self):
return reverse_lazy('start_page')
urls.py
path('login/', views.LoginUser.as_view(), name='login')
Ответы (2 шт):
Исходя из предоставленной строчки из лога ошибки довольно трудно предположить из за чего конкретно происходит ошибка с csrf токеном. Попробуйте методом подбора задать вручную настройки токена в файле settings.py. Вот одно из решений проблемы:
SESSION_COOKIE_SECURE=True
SESSION_COOKIE_SAMESITE='None'
CSRF_COOKIE_SECURE=True
Вот ссылка на нужный кусок текста в документации фреймворка
Проблема была в том, что при написании ссылки на ресурс в разных браузерах, я не указывал протокол (http/https). Некоторые браузеры подставляли http - и я получал ошибку; другие - https, и тогда все работало корректно.