《一》: 準備工作:
1:安裝djangorestframework-jwt
拓展
pip install djangorestframework-jwt
rest_framework =
jwt_auth =
思路:新建乙個序列化器的包:serializers, 然後在裡面定義序列化器。 首先第乙個登入介面,我們需要序列化器對我們的username,和password 進行校驗。校驗流程: 先對username和password進行常規校驗,如果校驗成功,使用自定義登入後端對使用者名稱密碼進行校驗,這個時候就需要自定義校驗了,可以採用最終的校驗:validate(self,attr)這個函式進行校驗,如果校驗失敗,需要drf丟擲異常:validatederror , 如果校驗成功,則接下來需要給使用者辦法令牌。令牌的頒發需要使用:
from rest_framework_jwt.utils import jwt_payload_handler,jwt_encode_handler
。
from django.contrib.auth import authenticate
from rest_framework import serializers
# 目的定義乙個序列化器對username 和password進行校驗
# 這裡由於不設及模型類所以繼承serializers.serializer
from rest_framework_jwt.utils import jwt_payload_handler, jwt_encode_handler
class
loginserializer
(serializers.serializer)
:
username = serializers.charfield(required=
true),
password = serializers.charfield(required=
true),
# 接下來要使用登陸驗證後端來校驗使用者名稱和密碼,此時就需要自定義校驗---採用最終的校驗
defvalidate
(self, attrs)
:# 由於傳入的是使用者名稱和密碼的字典格式,所以可以直接拆包
user = authenticate(
**attrs)
if user is
none
:raise serializers.validationerror(
"使用者名稱或者密碼錯誤!!!"
)# 如果校驗成功,那麼就要給顧客辦法令牌
# 傳入使用者物件,得到荷載物件
payload = jwt_payload_handler(user)
# 傳入荷載物件,得到令牌物件
tocken = jwt_encode_handler(payload)
return
from rest_framework.response import response
from rest_framework.views import apiview
# 需要繼承哪個呢?---不需要對資料進行增刪改查,所以只需繼承apiview
class
loginview
(apiview)
:def
post
(self, request)
: serializer = loginserializer(data=request.data)
# 傳入raise_exception表示如果校驗失敗則丟擲異常
serializer.is_valid(raise_exception=
true
)return response(
)
from django.urls import re_path
# obtain_jwt_token為拓展外掛程式提供的用於驗證使用者名稱和密碼並簽發token的檢視
from rest_framework_jwt.views import obtain_jwt_token
from
.views.login_views import
*urlpatterns =
[# re_path(r'^authorizations/$', loginview.as_view()),
re_path(r'^authorizations/$'
, obtain_jwt_token)
,]
2:新建meiduo_mall/utils/jwt_response_handlers.py
模組,自定義obtain_jwt_token
檢視中用於構造響應的函式
def
jwt_response_payload_handler
(token, user=
none
, request=
none):
return
3:編輯dev.py:
jwt_auth =
《四》: 前端儲存tocken的方式:
1:前端儲存tocken的方式:
localstorage.token = response.data.token;
localstorage.username = response.data.username;
localstorage.user_id = response.data.user_id;
2:
rest_framework_jwt
拓展的身份認證後端jsonwebtokenauthentication
所約定的前端傳遞token
的方式:
this.axios.get(cons.apis +
'/goods/brands/'
+this.edit_id+
'/',
, responsetype:
'json',}
).then(dat=
>
).catch(err=
>
);
4:後端驗證tocken:
由rest_framework_jwt
拓展外掛程式提供的jsonwebtokenauthentication
認證後端自動認證
rest_framework =
核心**:
# todo:判斷是否為管理站點頁面登陸,如果是需要進一步校驗is_staff=true
# 如果是**頁面登陸,request是乙個請求物件
# 如果是管理站點頁面登陸,request是乙個none
if request is
none
andnot user.is_staff:
return
none
# 繼承django預設的傳統認證後端
class
usernamemobileauthbackend
(modelbackend)
:# 重寫authenticate方法
# 原因:預設的authenticate方法,只會根據username欄位去過濾查詢使用者
defauthenticate
(self, request, username=
none
, password=
none
,**kwargs)
:# 允許多賬號登陸的情況下,前端傳來的"username"有可能是使用者名稱也有可能是手機號
try:
# 1、先按使用者名稱查詢
user = user.objects.get(
# username=="18588269037" or mobile=="18588269037"
q(username=username)
| q(mobile=username)
| q(email=username)
)except user.doesnotexist as e:
return
none
# 使用者名稱找不到,返回none表示認證失敗
# todo:判斷是否為管理站點頁面登陸,如果是需要進一步校驗is_staff=true
# 如果是**頁面登陸,request是乙個請求物件
# 如果是管理站點頁面登陸,request是乙個none
if request is
none
andnot user.is_staff:
return
none
# 3、某乙個找到了,再校驗密碼
if user.check_password(password)
:return user
ubuntu 管理員登入問題
摘自 http www.5dlinux.com article 1 2008 linux 20024.html 我們平時以都以我們裝系統時,設定的使用者名稱和密碼登入,你可能就覺得,你是以管理員身份登入的,其實不然,你和普通使用者一樣,幹什麼事都要密碼。此外還有許可權。比如進系統的核心,你就進不去了...
kali啟用root管理員登入
1.啟動kali liunx 進入開機啟動頁面,按鍵盤e鍵進入kali gnu grub頁面 2.在kali gnu grub頁面,選擇linux那一行,將ro 改為 rw 在此行末尾增加 init bin bash 修改完畢以後按ctrl x 鍵進入單使用者模式 3.按ctrl c 進入單使用者模...
jenkins忘記管理員登入密碼
jenkins 管理員的密碼忘記的處理辦法 首先,進入 jenkins 目錄 比如c users administrator jenkins 備份 config.xml 為 config.xml.bak 開啟 config.xml 配置檔案,修改 true 為 false 把 配置刪除。重啟jenk...