У объекта 'AnonymousUser' нет атрибута '_meta' | Django Authentication

Одна и та же система аутентификации в трех разных местах проекта, т.е. аутентификация пользователя при входе, регистрации и сбросе пароля. При сбросе пароля все время работает нормально. При регистрации иногда работает, иногда нет, а при входе работает в редких случаях. Также ошибка все время одна и та же.

ОШИБКА

AttributeError at /userauth/user-activate/NA/avnpw3-de3afda5cfeae9690598ace91235106a/smqia40453665072/pW1QdEFRkm42txOZ
'AnonymousUser' object has no attribute '_meta'
Request Method: POST
Request URL:    http://127.0.0.1:8000/userauth/user-activate/NA/avnpw3-de3afda5cfeae9690598ace91235106a/smqia40453665072/pW1QdEFRkm42txOZ
Django Version: 3.2.7
Exception Type: AttributeError
Exception Value:    
'AnonymousUser' object has no attribute '_meta'
Exception Location: C:\Users\smqia\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\functional.py, line 247, in inner
Python Executable:  C:\Users\smqia\AppData\Local\Programs\Python\Python39\python.exe
Python Version: 3.9.7
Python Path:    
['C:\\xampp\\htdocs\\Projects\\Barter',
 'C:\\Users\\smqia\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip',
 'C:\\Users\\smqia\\AppData\\Local\\Programs\\Python\\Python39\\DLLs',
 'C:\\Users\\smqia\\AppData\\Local\\Programs\\Python\\Python39\\lib',
 'C:\\Users\\smqia\\AppData\\Local\\Programs\\Python\\Python39',
 'C:\\Users\\smqia\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages']
Server time:    Fri, 05 Nov 2021 16:35:02 +0000

КОД

settings.py

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    )

views.py

username = smqia404
password = ***************

user = authenticate(request, username=username, password=password, backend='django.contrib.auth.backends.ModelBackend')
login(request, user, backend='django.contrib.auth.backends.ModelBackend')

authenticate возвращает None, если предоставленные учетные данные недействительны, и login ожидает объект User.

Так, согласно инструкциям документации, вам нужно проверить, вернул ли authenticate пользователя или нет.

user = authenticate(request, username=username, password=password, backend='django.contrib.auth.backends.ModelBackend')
if user is not None:
    login(request, user, backend='django.contrib.auth.backends.ModelBackend')
else:
    # handle non-auth users

Если вы получаете ошибку объекта 'AnonymousUser', пожалуйста, проверьте, сохранен ли пользователь в модели пользователей в базе данных или нет. Если нет или учетные данные не совпадают, это говорит о том, что пользователь был 'AnonymousUser', иначе система аутентификации позволяет нам войти в систему. Вы также можете попробовать декоратор login_requried (требуется вход, чтобы определить, существует ли пользователь в модели пользователей в базе данных).

проверить, существует ли пользователь в базе данных или нет, используя ORM.

В интерпретаторе введите python manage.py shell

from django.contrib.auth.models import User
q=User.objects.filter("username"="enter username")
if len(q)>0:
   print("user existed")
   #try to login using authenticate function 
   # try to login with out authenticate function
   username=User.objects.get_or_404(username="your username")
   if username not None and username.password="your password":
       #login
       
   else:
       # user not found / credentials are mismatch.
else:
   
   #create user in Users Model(Handling if user doesn't exist)
   user = User.objects.create_user('username', 'email', 'password')
   user.save()

мы считаем, что у вас отсутствует метод сохранения при регистрации пользователя. пожалуйста, проверьте один раз.

Если вам нужен полный код по этой проблеме, пожалуйста, напишите еще раз, я поделюсь им.

Вернуться на верх