您好,登錄后才能下訂單哦!
本篇內容介紹了“django2.2.6中check_password驗證失敗的解決辦法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
python3.6, django 2.2.6 AUTHENTICATION_BACKENDS 里添加自定義認證 CustomBackend(郵箱、手機號等),
用 python manage.py createsuperuser 創建的超級管理員登錄時密碼一直驗證失敗(False)
# .\apps\users\backends\other.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @author: yinzhuoqun @site: http://zhuoqun.info/ @email: yin@zhuoqun.info @time: 2019/10/16 18:06 """ from django.contrib.auth import get_user_model from django.contrib.auth.backends import ModelBackend from django.db.models import Q from django.contrib.auth.hashers import check_password from apps.users.models import UserProfile User = get_user_model() # 用戶名之外的唯一值字段也能用來登錄,setting 里要有對應的配置 AUTHENTICATION_BACKENDS class CustomBackend(ModelBackend): def authenticate(self, request, username=None, password=None, **kwargs): try: # 郵箱、用戶名、手機號碼 登錄 user = UserProfile.objects.get(Q(username=username) | Q(email=username) | Q(phone=username)) # user_check_password = user.check_password(password) user_check_password = check_password(password, user.password) if user_check_password: return user except User.DoesNotExist: return None
# settings.py
AUTH_USER_MODEL = 'users.UserProfile' # 重載系統的用戶,讓 UserProfile 生效 # AUTH 方法(支持郵箱、手機號等登錄), 驗證從上到下 AUTHENTICATION_BACKENDS = ( 'apps.users.backends.other.CustomBackend', # 'social_core.backends.weibo.WeiboOAuth3', # 'social_core.backends.qq.QQOAuth3', # 'social_core.backends.weixin.WeixinOAuth3', # 'social_core.backends.github.GithubOAuth3', # 'social_core.backends.gitlab.GitLabOAuth3', # 'django.contrib.auth.backends.ModelBackend', )
刪庫重建無數次都不行,突然想到用 shell 重新設置密碼一次,果然就登錄上去了。
(tracbug) .\tracbug>python manage.py shell Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from django.contrib.auth import get_user_model >>> User = get_user_model() >>> user = User.objects.get(username="yinzhuoqun") >>> user <UserProfile: Yinzhuoqun> >>> user.username 'yinzhuoqun' >>> user.set_password("xxxxxxxx") >>> user.save()
“django2.2.6中check_password驗證失敗的解決辦法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。