2016-11-08 3 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}) 

$(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; } } }); } }) }); 

AJAX

問題がどこにあるかを見つけ出すことはできません。それは突然動作を停止しました。

+0

JSをブラウザでデバッグしましたか? –

+0

はい、状態:0を返します。 –

+0

このauthenticate()関数は何を返しますか? – FeedTheWeb

答えて

3

問題は、通常通り、非常に簡単でした。私は偶然、authenticateの後にlogin(request,user)行を削除したので、ユーザーは認証されているがログインしていません。

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のドキュメントを参照してください。

関連する問題