簡體   English   中英

'AnonymousUser' 對象沒有屬性 '_meta' | 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM