Django: после успешного login() при следующего обновления страницы request.user снова становится anonymous
Всем добрый день! Я сделала кастомный метод авторизации, а именно У меня авторизация происходит с помощью ajax
Вот, собственно, сама вьюха
class CustomLogin(LoginView):
authentication_form = CustomUserAuthForm
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
email = form.cleaned_data['username']
password = form.cleaned_data['password']
needed_user = authenticate(request, email=email, password=password)
if needed_user is not None:
if needed_user.is_active:
login(request, needed_user)
request.session['night_mode'] = False
request.session.save()
return JsonResponse({'success': 1})
else:
return JsonResponse({'errors': 'Email and password didn\'t match.'})
if form.errors:
errors = []
for key, value in enumerate(form.errors):
errors += form.errors[value]
return JsonResponse({'errors': errors})
return super().post(request, *args, **kwargs)
Форма:
<!-- Modal AUTHORIZATION -->
<div id="auth_view" class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-body">
<button type="button" class="close close_model" data-dismiss="modal" aria-label="Close">
<i class="fal fa-times" style="font-size: 16px;"></i>
</button>
<div class="modal-body__title">
Authorization
</div>
<div class="modal-body__form-container">
<div class="form-container">
<form id="auth_view__form" class="form-container__form" method="post"
enctype="multipart/form-data">
{% csrf_token %}
<p id="error-message"></p>
{% for field in auth_form %}
<div class="form-group">
{{ field.label_tag }}
{{ field }}
</div>
{% endfor %}
<input type="submit" value="login">
<input type="hidden" name="next" value="{{ next }}">
<p id="password_reset"><a href="{% url 'password_reset' %}">Forgot password</a></p>
<div class="or_container">
<hr>
<div class="or_label">or</div>
</div>
<div class="auth_by_socials">
<div class="auth_by_facebook"><i class="fab fa-facebook-f"></i></div>
<div class="auth_by_google"><i class="fab fa-google"></i></div>
</div>
<div id="registration">
<div>Sign up with e-mail</div>
<i class="fal fa-long-arrow-right" aria-hidden="true"></i>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
ajax:
$('#auth_view__form').on('submit', function (event) {
event.preventDefault();
$.ajax({
type: "POST",
url: "{% url 'login_modal' %}",
data: $('#auth_view__form').serialize(),
datatype: 'json',
success: function (data) {
if (data['errors']) {
$('#error-message').html(data['errors']);
} else if (data['success']) {
location.reload();
}
}
});
});
backends.py
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
class CustomAuthBackend(ModelBackend):
def authenticate(self, request, email=None, password=None, **kwargs):
usr = get_user_model()
try:
user = usr.objects.get(email=email)
if user.check_password(password):
return user
except usr.MultipleObjectsReturned:
return None
except usr.DoesNotExist:
return None
return None
def get_user(self, user_id):
usr = get_user_model()
try:
return usr.objects.get(pk=user_id)
except usr.DoesNotExist:
return None
и всё хорошо, но при обновлении страницы юзер разлогинивается
и всё раньше работало, но после того, как я подняла сервер на удаленной машине, она стала вести себя таким вот образом. Есть какие-то идеи? Заранее спасибо!
P.S.: то есть на return JsonResponse({'success': 1}) request.user равен пользователю, который авторизовался
Ответы (1 шт):
Автор решения: Katya Boeva
→ Ссылка
Всё стало работать, когда я сделала в settings.py следующее:
CSRF_COOKIE_SECURE = False
SESSION_COOKIE_SECURE = False