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" называется я получаю эту ошибку:
AttributeError в/password_check/
объекта 'NoneType' не имеет атрибута 'is_active'

Я попытался установить напечатайте после «request.is_ajax()», чтобы проверить значения, и иногда он ловит сообщение электронной почты, а иногда и пароль, но никогда не объединяется.

Как я могу это исправить?

+0

Это говорит вам, что ничего не возвращается из 'authenticate', по-видимому, потому, что адрес электронной почты и пароль не совпадают. Вы должны это проверить. –

ответ

2

При использовании функции django authenticate объект пользователя возвращается только после успешной аутентификации.

Если указаны неправильные учетные данные, authenticate возвращает None. Вот почему вы получаете AttributeError.

Чтобы решить эту проблему, добавьте дополнительную проверку для пользователя, например:

if user and user.is_active: 

Таким образом, атрибут пользователя is_active будет проверяться только если пользователь существует.

+0

Я больше не получаю AttributeError - и функция правильно вызывается - но все же я не могу получить два значения одновременно: всегда один или другой. –

+0

Какие ценности вы говорите? – v1k45

+0

«email» и «password» –

Смежные вопросы