2016-11-08 2 views
1

У меня есть вход AJAX в моем проекте Django. Ajax_login view получает POST, аутентифицирует пользователя и возвращает JsonResponse. Кажется, что все работает правильно, но пользователь фактически не вошел в систему.Django действует как пользователь, но не

Странно то, что в представлении я проверяю, вошел ли пользователь в систему, и они есть.

VIEW

@csrf_exempt 
def ajax_login_(request): 
    username = request.POST.get('username') 
    password = request.POST.get('password') 

    user = authenticate(username=username,password=password) 

    if user: 
     if user.is_authenticated(): 
      print 'IS LOGGED IN' #THIS IS BEING PRINTED INTO CONSOLE SO USER IS LOGGED IN 
      return JsonResponse({'status':0}) 

    return JsonResponse({'status':1}) 

AJAX

$(document).ready(function() { 
    $('.login-form').find('.submitButton').click(function (e) { 
     var next = $(this).closest('.login-form').find('input[name="next"]').val(); 
     var password = $(this).closest('.login-form').find('#id_password').val(); 
     var username =$(this).closest('.login-form').find('#id_username').val(); 
     e.preventDefault(); 
     var errors = 0; 
     if (username == '') { 
      $('#id_username_required').show(); 
      errors += 1; 
     } else { 
      $('#id_username_required').hide(); 
     } 
     if (password == '') { 
      $('#id_password_required').show(); 
      errors += 1; 
     } else { 
      $('#id_password_required').hide(); 
     } 

     if (errors == 0) { 
      $.ajax({ 
       url: '/ajax/login/', 
       type: 'post', 
       data: { 
        'password': password, 
        'username': username, 
       }, 
       success: function (data) { 
        if (data.status == 0) { 
         window.location.reload(); 
        } else { 
         $('.login-modal-credentials-incorrect').show(); 
         return false; 
        } 
       } 
      }); 
     } 
    }) 
}); 

не могу понять, где проблема. Он внезапно прекратил работать.

+0

Вы отлаживали свой JS в браузере, чтобы увидеть, какой ответ вы фактически получаете? –

+0

Да, он возвращает статус: 0, что хорошо. –

+0

Что возвращает функция authenticate()? – FeedTheWeb

ответ

3

Проблема была, как обычно, очень проста. Я случайно удалил login(request,user) после authenticate, так что пользователь был аутентифицирован, но не выполнил вход в систему.

1

Я думаю, проблема в вашем js-коде, где вы перезагружаете текущую страницу. Вместо этого, я считаю, вы должны перенаправить на целевую страницу/домашнюю страницу пользователю, если пользователь успешно прошел аутентификацию.

Например.

$.ajax({ 
      url: '/ajax/login/', 
      type: 'post', 
      data: { 
       'password': password, 
       'username': username, 
      }, 
      success: function (data) { 
       if (data.status == 0) { 
        window.location = "http://yourhost/landing-url" 
       } else { 
        $('.login-modal-credentials-incorrect').show(); 
        return false; 
       } 
      } 
     }); 
3

Вы забыли позвонить login() после authenticate().

from django.contrib.auth import authenticate, login 

def ajax_login_(request): 
    ... 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     login(request, user) 

См. Документы на how to log a user in для получения дополнительной информации.