2016-11-08 54 views
1

我在我的Django項目中登錄了一個AJAX。 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

您忘記了在authenticate()之後致電login()

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上的文檔。

相關問題