1. 程式人生 > >drf元件之jwt認證

drf元件之jwt認證

drf元件之jwt認證模組

一、認證規則

全稱:json web token
解釋:加密字串的原始資料是json,後臺產生,通過web傳輸給前臺儲存
格式:三段式 - 頭.載荷.簽名 - 頭和載荷才有的是base64可逆加密,簽名才有md5不可逆加密
內容:
頭(基礎資訊,也可以為空):加密方式、公司資訊、專案組資訊、...
載荷(核心資訊):使用者資訊、過期時間、...
簽名(安全保障):頭加密結果+載荷加密結果+伺服器祕鑰 的md5加密結果

認證規則:
後臺一定要保障 伺服器祕鑰 的安全性(它是jwt的唯一安全保障)
後臺簽發token -> 前臺儲存 -> 傳送需要認證的請求帶著token -> 後臺校驗得到合法的使用者

為什麼要有jwt認證:
1) 後臺不需要儲存token,只需要儲存簽發與校驗token的演算法,效率遠遠大於後臺儲存和取出token完成校驗
2) jwt演算法認證,更適合伺服器叢集部署

二、認證模組

安裝:pip install djangorestframework-jwt
模組包:rest_framework_jwt

採用drf-jwt框架,後期任務只需要書寫登入
為什麼要重寫登入:drf-jwt只完成了賬號密碼登入,我們還需要手機登入,郵箱登入
為什麼不需要重寫認證類:因為認證規則已經完成且固定不變,變得只有認證字串的字首,字首可以在配置檔案中配置

三、JWT使用

jwt配置;

在settings.py檔案中配置,如果不配置,預設走jwt預設的

在urls.py中配置

在postman中測試一下籤發token

注意:上面三個介面都是傳送POST請求

四、利用JWT實現多方式登入

注:APIResponse 為自定義Response物件

# views.py
from rest_framework.views import APIView
from . import models,serializers
from utils.response import APIResponse

class LoginAPIView(APIView):
    # 登入介面應該禁用所有的認證和、許可權,因為不管是誰都應該能進來
    authentication_classes = []
    permission_classes = []
    def post(self, request, *args, **kwargs):
        # 將資料傳到序列化元件進行校驗
        user_ser = serializers.LoginSerializer(data=request.data)
        user_ser.is_valid(raise_exception=True)

        return APIResponse(msg='login success', data={
            'username': user_ser.user.username,
            'token': user_ser.token
        })

# serializer.py
from rest_framework.serializers import ModelSerializer, CharField, ValidationError, SerializerMethodField
from . import models
from django.contrib.auth import authenticate
import re
from rest_framework_jwt.serializers import jwt_payload_handler, jwt_encode_handler

class LoginSerializer(ModelSerializer):
    username = CharField(write_only=True)
    password = CharField(write_only=True)
    class Meta:
        model = models.User
        fields = ('username', 'password')

    def validate(self, attrs):
        # user_obj = authenticate(**attrs)
        # if not user_obj:
        #     raise ValidationError('使用者名稱或密碼錯誤')

        # 賬號密碼登入 ==》 多方式登入
        user = self._many_method_login(**attrs)

        # 通過user物件生成payload載荷
        payload = jwt_payload_handler(user)
        # 通過payload簽發token
        token = jwt_encode_handler(payload)

        # 將user和token存放在序列化物件中,方便返回到前端去
        self.user = user
        self.token = token

        return attrs

    # 多方式登入 (使用者名稱、郵箱、手機號三種方式登入)
    def _many_method_login(self, **attrs):
        username = attrs.get('username')
        password = attrs.get('password')
        # 利用正則匹配判斷使用者輸入的資訊
        # 1.判斷郵箱登入
        if re.match(r'.*@.*', username):
            user = models.User.objects.filter(email=username).first()  # type: models.User
        # 2.判斷手機號登入
        elif re.match(r'^1[3-9][0-9]{9}$',username):
            user = models.User.objects.filter(mobile=username).first()
        # 3.使用者名稱登入
        else:
            user = models.User.objects.filter(username=username).first()

        if not user:
            raise ValidationError({'username': '賬號有誤'})

        if not user.check_password(password):
            raise ValidationError({'password': '密碼錯誤'})

        return user

使用postman測試程式碼:

相關推薦

drf元件jwt認證

drf元件之jwt認證模組 一、認證規則 全稱:json web token 解釋:加密字串的原始資料是json,後臺產生,通過web傳輸給前臺儲存 格式:三段式 - 頭.載荷.簽名 - 頭和載荷才有的是base64可逆加密,簽名才有md5不可逆加密 內容: 頭(基礎資訊,也可以為空):加密方式、公司資訊、專

drf認證元件、許可權元件jwt認證、簽發、jwt框架使用

目錄 一、註冊介面 urls.py views.py serializers.py 二、登入介面 三、使用者中心介面(許可權校驗) urls.

Django元件使用者認證和中介軟體

使用者認證元件 功能:用session記錄登入驗證狀態 前提:使用者表 django自帶的auth_user 建立超級使用者python manage.py createsuperuser API 如下 一、 auth模組 1: from django.contrib import

laravel jwt認證使用詳解

.html spa nat var req store ogr doc hcl 轉載 http://www.heibaiketang.com/blog/show/3.html https://packagist.org/packages/tymon/jwt-a

.Net Core 認證元件Cookie認證元件解析原始碼

接著上文.Net Core 認證系統原始碼解析,Cookie認證算是常用的認證模式,但是目前主流都是前後端分離,有點雞肋但是,不考慮移動端的站點或者純管理後臺網站可以使用這種認證方式.注意:基於瀏覽器且不是前後端分離的架構(頁面端具有服務端處理能力).移動端就不要考慮了,太麻煩.支援前後端分離前給移動端提供認

DRF許可權認證頻率元件

在程式設計的世界中,我們認為,使用者輸入的所有資料都是不可靠的,不合法的,直接使用使用者輸入的資料是不安全的,不僅如此,我們還需要控制使用者的訪問行為,接下來,我們要學習認證元件、許可權元件、頻率元件。 引入 同學們,通過前面三節課的學習,我們已經詳細瞭解了DRF提供的幾個重要的工具,DRF充分利用了面向

DRF內建認證元件自定義認證系統

## 自定義token認證 我們知道,在django專案中不管路由以及對應的檢視類是如何寫的,都會走到 `dispatch` 方法,進行路由分發, 在閱讀 `APIView類中的dispatch` 方法的原始碼中,有個 `self.initial(request, *args, **kwargs)`,可以

[django]前後端分離JWT使用者認證

在前後端分離開發時為什麼需要使用者認證呢?原因是由於HTTP協定是不儲存狀態的(stateless),這意味著當我們透過帳號密碼驗證一個使用者時,當下一個request請求時它就把剛剛的資料忘了。於是我們的程式就不知道誰是誰,就要再驗證一次。所以為了保證系統安全,我們就需要驗證使用者否處於登入狀態。 傳統方

DAY98 - Rest Framework(三)- 序列化元件HyperlinkedIdentityField和初識認證元件

一、序列化元件之HyperlinkedIdentityField HyperlinkedIdentityField可以通過反向解析向前臺返回一個連結 url(r'^Books/(?P<id>\d+)', views.BooksDetail.as_view(),name='test'), #

Django使用者認證元件

  使用者認證元件用的是Django自帶一個表:auth_user   一、auth模組   1,authenticate()判斷使用者是否存在方法 user=authenticate(username='xxx',password='xxxx') #需要提供兩個引數,username,pas

前後端分離JWT使用者認證

在前後端分離開發時為什麼需要使用者認證呢?原因是由於HTTP協定是不儲存狀態的(stateless),這意味著當我們透過帳號密碼驗證一個使用者時,當下一個request請求時它就把剛剛的資料忘了。於是我們的程式就不知道誰是誰,就要再驗證一次。所以為了保證系統安全,我們就需要驗證使用者否處於登入狀態。傳統方式前

drf序列化元件檢視家族

一、檢視家族的分類 1.匯入分類 from rest_framewok import views, generics, mixins, viewsets views:檢視類 ​ 兩大檢視類:APIView、GenericAPIView from rest_framework.views import APIV

DRF內建許可權元件自定義許可權管理類

# DRF內建許可權元件permissions 許可權控制可以限制使用者對於檢視的訪問和對於具體資料物件的訪問。 - 在執行檢視的dispatch()方法前,會先進行檢視訪問許可權的判斷 - 在通過get_object()獲取具體物件時,會進行模型物件訪問許可權的判斷 在settings.py中設定DR

drf JWT認證模組與自定製

JWT模組    在djangorestframework中,有一款擴充套件模組可用於做JWT認證,使用如下命令進行安裝: pip install djangorestframework-jwt    現在,就讓我們開始使用它吧。 JWT配置    該模組的所有配置都會從settings.py中進行讀取,與

Tomcat容器https配置單向認證

-a nis get new sls cep local min session 測試環境 Windows 7 IE 11 Intellij IDEA 2017 JDK 1.8.0_25 Tomcat 6.0.36 httpcore 4.4.6 httpclient 4.5

【Shiro】Apache Shiro架構身份認證(Authentication)

trac pretty asm 安全保障 軟件測試 釋放 model tac 讀取配置文件 Shiro系列文章: 【Shiro】Apache Shiro架構之權限認證(Authorization) 【Shiro】Apache Shiro架構之集成web

spring security oauth2 jwt 認證和資源分離的配置文件(java類配置版)

boot cond lan 資源分離 測試 sql adapter 依賴 註入 最近再學習spring security oauth2。下載了官方的例子sparklr2和tonr2進行學習。但是例子裏包含的東西太多,不知道最簡單最主要的配置有哪些。所以決定自己嘗試搭建簡單版

androidGMS認證

經驗 err lines ddr class 缺少 def 每次 num 來到了新的公司,才知道做手機是須要做GMS認證的。於是從一個從沒有做過GMS認證的小白到一個月做了8個項目的GMS認證。最後。自己都是吐了。每天晚上都是一個人傻傻在加班。更是知

jmeter 配置元件計數器Counter

fig 數值 但是 成了 trac read 這樣的 clas end 用jmeter生成數據 我用過幾種以下幾種方法 1、CSV Data Set Config 參數化 2、${_Random} ${_Random}是jmeter函數助手裏面自帶的一個函數,作用是返回指

Ubuntu14下搭建各種服務器AAA認證2

mage min blank 數據流 上進 1.5 RM vpdn 認證 1.搭建Tacacs+服務器 TACACS+(Terminal Access Controller Access Control System,終端訪問控制器控制系統協議) 是在TACACS協議的