![](/img/trans.png)
[英]'AnonymousUser' object has no attribute '_meta' in Django
[英]'AnonymousUser' object has no attribute '_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
代碼
設置.py
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)
視圖.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')
如果提供的憑據無效並且login
需要用戶對象,則authenticate
返回None
。
因此,正如 docs 所指示的,您需要檢查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()
我們相信您在注冊用戶時缺少保存方法。 請檢查一次。
如果您需要有關此問題的完整代碼,請再次發布以分享。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.