Что ж, похоже, я нашел решение, которое точно не решает ошибку напрямую, но позволяет избежать ситуации, когда ошибка может произойти.Поведение немного отличается, но для меня оно работает очень хорошо, и я предполагаю, что в большинстве случаев оно будет таким же, как и у других.
Итак, во-первых, я перенаправляю пользователя со страницы входа, когда пользовательЯ уже выполнил вход в систему. Я делаю это, создавая свое собственное представление для входа в систему:
class LoginView(LoginView):
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated:
return HttpResponseRedirect(request.GET.get("next") or "/")
else:
return super().dispatch(request, *args, **kwargs)
Во-вторых, я сделал это так, чтобы каждый раз, когда окно становилось «сфокусированным» (т.е. вы переходили на вкладку), простой запрос ajaxотправлено, чтобы проверить, аутентифицирован ли пользователь, если это так, окно будет перезагружено, таким образом, перенеся его на правильную страницу.
Для этого я добавил этот javascript на страницу login.html
:
{% block extrascripts %}
{{ block.super }}
<script>
"use strict";
window.onfocus = function () {
$.ajax({
url: "/accounts/status/",
success: function(result, status, xhr) {
if (result.is_authenticated) {
window.location.reload();
}
}
});
};
</script>
{% endblock %}
И добавил это представление:
@method_decorator(csrf_exempt, name="get")
class StatusView(View):
def get(self, request, *args, **kwargs):
return JsonResponse({"is_authenticated": request.user.is_authenticated})
И я, конечно, тоже обновил URL.
Я также добавлю, что если вы неЕсли вы не хотите, чтобы вас перенаправили со страницы входа в систему после проверки подлинности, вы можете оставить этот код вне поля, и он все равно должен исправить ошибку, учитывая, что у меня не было ошибки, когда я сначала перезагрузил страницу, прежде чем пытаться войти в систему.в.