У объекта '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()
мы считаем, что у вас отсутствует метод сохранения при регистрации пользователя. пожалуйста, проверьте один раз.
Если вам нужен полный код по этой проблеме, пожалуйста, напишите еще раз, я поделюсь им.