Если в кратце, я пишу систему аутентификации на django, по средствам попапов и ajax-запросов.
Структура примерно такая:
На странице есть bootstrap popup (#LoginModal), в нем находится форма (#login-form).
При submit выполняется ajax запрос на view входа (url : "/login/" --> login_user).
Этот view (login_user) возвращает результат и далее js выводит информацию об ошибках или переадресовывает пользователя (если вход успешен).
Т.е. #LoginModal --> #login-form --> ajax --> /login/ --> login_user --> ajax-data --> reload or show errors
Вот мой код js + ajax:
alert('{{user.is_authenticated}}');
$('#login-form').on('submit', function(event){
event.preventDefault();
$('#login-form .alert-success').remove();
$('#login-form #login_btn').addClass('disabled');
$('#login-form #login_btn').prop('disabled', true);
$.ajax({
url : "/login/",
type : "get",
data : $('#login-form').serialize()
}).done(function(data) {
if (data == "OK") {
$('#login-form .alert-danger').remove();
$('#login-form').prepend('<div class="alert alert-success" role="alert"><strong>Успешно!</strong><br>Подождите секундочку...</div>');
document.location.href = document.location.href.replace('#open_login', '');
} else {
if (!$('#login-form .alert-danger').length) {
$('#login-form').prepend('<div class="alert alert-danger" role="alert"><strong>Ошибка!</strong><br>Введите правильное имя пользователя и пароль.</div>');
}
$('#login-form #login_btn').removeClass('disabled');
$('#login-form #login_btn').prop('disabled', false);
}
});
});
Вот мой login_user view:
def login_user(request):
username = request.GET.get('username')
password = request.GET.get('password')
auth_form = AuthenticationForm(request, {'username': username, 'password': password})
if auth_form.is_valid():
if request.GET.get('remember') == "true":
pass
else:
request.session.set_expiry(0)
user = authenticate(username=username, password=password)
login(request, user)
print(user.is_authenticated)
ret = 'OK'
else:
ret = 'field_errors'
return HttpResponse(ret)
И вот в чем заключается проблема.
Функция
login(request, user)
или не выполняется, или выполняется как-то не так.
При верных данных, алерт в js всегда показывает false;
И данные на странице говорят о том же.
А print во вьюхе говорит - true, все ок, бро! И юзера правильно выводит.
И я точно не помню, что менял, но в какой-то момент возникла эта штука.
Я в django недавно, нужна ваша помощь. Заранее благодарен.