0

Parsley.jsとDjangoでフロントエンドユーザー認証チェックを設定しようとしています。
は、これが私の見解AttributeError: 'NoneType'オブジェクトに 'is_active'属性がありません。

@requires_csrf_token 
def password_check(request): 
    email = request.POST.get('email') 
    password = request.POST.get('password1') 
    user = authenticate(email=email, password=password) 

    if request.is_ajax(): 
     if user.is_active: 
      res = "These password and e-mail are ok." 
      ajax_vars_login = {'response': res, 'email': email, 'password': password} 
      json_data_login = json.dumps(ajax_vars_login) 
     else: 
      res = "The e-mail or the password field aren't correct." 
      ajax_vars_login = {'response': res, 'email': email, 'password': password} 
      json_data_login = json.dumps(ajax_vars_login) 

     return HttpResponse(json_data_login, content_type='application/json') 

バリで

Parsley.addAsyncValidator(
    'emailPwCombination', function (xhr) { 
     var password = $('#password').parsley(); 
     var email = $('#email').parsley(); 
     var response = xhr.responseText; 
     var jsonResponse = JSON.parse(response); 
     var jsonResponseText = jsonResponse["response"]; 

     if(jsonResponseText == 'The password and e-mail are ok.') 
      return true; 
     if(jsonResponseText == '404') 
      return false; 
    }, '/password_check/' 
); 

しかし、 "password_check" 関数が呼び出されたとき、私はこのエラーを取得:/ password_check/
'NoneType' オブジェクトで
はAttributeErrorを属性がありません 'is_active'

私はprint "request.is_ajax()"の後に値をテストすると、電子メールとパスワードがキャッチされることがありますが、2つは決して一緒にキャッチされません。

どうすれば修正できますか?

+0

電子メールとパスワードが一致しないため、 'authenticate'から何も返されていないことを伝えています。あなたはそれを確認する必要があります。 –

答えて

2

authenticate djangoの機能を使用すると、認証が成功した場合にのみユーザオブジェクトが返されます。

資格情報が正しくない場合、authenticateNoneを返します。これがAttributeErrorになっている理由です。この問題を解決するには

は、このように、ユーザーのための追加のチェックを追加します。

if user and user.is_active: 

この方法で、ユーザーのis_active属性はユーザーのみが存在する場合にチェックされます。

+0

私はAttributeErrorをもう取得せず、関数は正しく呼び出されますが、それでも同時に2つの値を取得することはできません:常にどちらか一方。 –

+0

あなたはどんな価値観を持っていますか? – v1k45

+0

「電子メール」と「パスワード」 –

関連する問題