專案中三個不同地方的相同身份驗證系統,即在登錄、注冊和密碼重置時對用戶進行身份驗證。在密碼重置時,它一直作業正常。在注冊時有時有效,有時無效,而在極少數情況下登錄時有效。此外,錯誤始終相同。
錯誤
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')
uj5u.com熱心網友回復:
authenticate回傳None如果所提供的證書是無效的,并login期望一個用戶物件。
因此,正如 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
uj5u.com熱心網友回復:
如果您收到“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()
我們相信您在注冊用戶時缺少保存方法。請檢查一次。
如果您需要有關此問題的完整代碼,請再次發布以分享。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/349986.html
