django中已經封裝好了後端的認證功能authenticate
1:django rest framework jwt提供了登入簽發jwt的檢視,可以直接使用
驗證使用者名稱和密碼,驗證成功後,為使用者簽發jwt,前端將簽發的jwt儲存下來。
登入流程為:
查詢使用者資料,將查詢到的資料和使用者輸入的資料對比驗證
request.user===>當前登入的使用者
僅使用下面的**即可實現登入和簽發token
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
url(r'^authorizations/$', obtain_jwt_token),
]
但是此檢視函式所返回的只有乙個token值,當需要獲取到其他值,如user.id,username等值時,需要重寫jwt_response_payload_handler函式
2:新建乙個py檔案重寫自定義返回值的函式
def jwt_response_payload_handler(token, user=none, request=none):
"""自定義jwt認證成功返回資料
"""return
然後修改專案的配置檔案
jwt_auth =
便可實現登入功能,此時可以返回給客戶端token值和id,顯示使用者名稱資訊
3:實現使用不同的註冊資訊進行登入,如使用手機號、郵箱 + 密碼登入。
主要的邏輯是接收到使用者輸入的登入資訊,使用正規表示式來判斷使用者是使用的那種註冊資訊登入的,然後根據註冊資訊查詢到使用者物件,返回使用者資訊,實現多種號碼都可登入的功能
檢視jwt檢視的源**發現,查詢驗證的工作是由authenticate()方法完成,這個方法是由django提供的。
修改django認證系統的認證後端需要繼承django.contrib.auth.backends.modelbackend,並重寫authenticate方法。
authenticate(self, request, username=none, password=none, **kwargs)方法的引數說明:
from django.contrib.auth.backends import modelbackend
class myauthenticationbackends(modelbackend):
"""根據username查詢 user物件, 在使用user物件的check_password對比密碼是否正確"""
def authenticate(self, request, username=none, password=none, **kwargs):
if re.match(r'^1[3-9]\d$', username):
user = user.objects.get(mobile=username)
else:
user = user.objects.get(username=username)
if user.check_password(password):
return user
else:
return none
再在配置檔案中告知django我們自定義的認證
authentication_backends = [
'users.utils.usernamemobileauthbackend',
]
總結思路:
1.定義類
2.重寫authenticate方法
3.配置authentication_backends=[類]
django登入認證錯誤
def register request if request.method post username request.post.get username password request.post.get password print username,password if user.obje...
Django使用ldap認證登入
一 安裝依賴包 yum install gcc libffi devel python devel openssl devel openldap devel y 二 安裝python庫 pip install python ldap pip install django auth ldap 三 修改...
django自帶登入認證與登入自動跳轉
匯入django自帶模組 from django.contrib.auth import authenticate,login,logout 使用authenticate進行認證,使用login方法將user寫入session user authenticate username username,...