国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

drf——jwt

這篇具有很好參考價(jià)值的文章主要介紹了drf——jwt。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

jwt原理

使用jwt認(rèn)證和使用session認(rèn)證的區(qū)別

drf——jwt

drf——jwt文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-463721.html

三段式

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

# 1. header jwt的頭部承載兩部分信息:
聲明類(lèi)型 這里是jwt
聲明加密的算法 通常直接使用 HMSC SHA256
公司信息
{
    'typ':'jwt',
    'alg':'HS256'
}
然后將頭部進(jìn)行base64編碼 構(gòu)成了第一部分
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

# 2. payload 載荷就是存放有效信息的地方
當(dāng)前用戶信息 用戶名 用戶id
exp:jwt的過(guò)期時(shí)間 這個(gè)過(guò)期時(shí)間必須要大于簽發(fā)時(shí)間

定義一個(gè)payload:
{
    "exp":"1234567890",
    "name":"jason",
    "user_id":99
}
然后將其進(jìn)行base64編碼 得到j(luò)wt的第二部分
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

# signature  JWT的第三部分是一個(gè)簽證信息,這個(gè)簽證信息由三部分組成:

header (base64后的)
payload (base64后的)
secret
這個(gè)部分需要base64加密后的header和base64加密后的payload使用.連接組成的字符串,然后通過(guò)header中聲明的加密方式進(jìn)行加鹽secret組合加密,然后就構(gòu)成了jwt的第三部分。

將這三部分用.連接成一個(gè)完整的字符串,構(gòu)成了最終的jwt:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

jwt開(kāi)發(fā)流程

# 使用jwt認(rèn)證的開(kāi)發(fā)流程 就是兩部分
	第一部分:簽發(fā)token的過(guò)程 登錄做的
        用戶攜帶用戶名和密碼 訪問(wèn)我 我們校驗(yàn)通過(guò),生成token串,返回給前端
    第二部分:token認(rèn)證過(guò)程 登錄認(rèn)證時(shí)使用 其實(shí)就是咱們之前講的認(rèn)證類(lèi) 在認(rèn)證類(lèi)中完成對(duì)token的認(rèn)證操作
        用戶訪問(wèn)我們需要登陸后才能訪問(wèn)的接口,必須攜帶我們簽發(fā)的token串(請(qǐng)求頭)
        我們?nèi)〕鰐oken 驗(yàn)證該token是否過(guò)期,是否被篡改,是否是偽造的
        如果正常,說(shuō)明荷載中的數(shù)據(jù),就是安全的,可以根據(jù)荷載中的用戶id,查詢出當(dāng)前登錄用戶,放到request中即可

drf-jwt快速使用

# djagno+drf框架中,使用jwt來(lái)做登錄認(rèn)證

# 使用第三方:
	-django-rest-framework-jwt:https://github.com/jpadilla/django-rest-framework-jwt
    -djangorestframework-simplejwt:https://github.com/jazzband/djangorestframework-simplejwt
        
# 我們可以自己封裝 :https://gitee.com/liuqingzheng/rbac_manager/tree/master/libs/lqz_jwt

# 安裝
	pip3 install djangorestframework-jwt
    
# 補(bǔ)充:
	密碼明文一樣,每次加密后都不一樣,如何做,動(dòng)態(tài)加鹽,動(dòng)態(tài)的鹽要保存,跟密碼保存在一起
    有代碼 有數(shù)據(jù)庫(kù) 沒(méi)有登不進(jìn)去的系統(tǒng)
 
# 解決不了:
	token被獲取,模擬發(fā)送請(qǐng)求
    不能篡改
    不能偽造
 
# 快速使用
	簽發(fā)過(guò)程(快速簽發(fā)),必須是auth的user表(人家?guī)湍銓?xiě)好了)
    	登錄接口--》基于auth的user表簽發(fā)的
    認(rèn)證過(guò)程
    	登錄認(rèn)證,認(rèn)證類(lèi)(寫(xiě)好了)
       
   
# 總結(jié):
	簽發(fā):只需要在路由中配置
        from rest_framework_jwt.views import obtain_jwt_token
        urlpatterns = [
            path('login/', obtain_jwt_token), 
        ]
    認(rèn)證:視圖類(lèi)上加
    	class BookView(ViewSet):
            authentication_classes = [JSONWebTokenAuthentication] # 認(rèn)證類(lèi),drf-jwt提供的
            permission_classer = [IsAuthenticated]  # 權(quán)限類(lèi) drf提供的
    訪問(wèn)的時(shí)候 要在請(qǐng)求頭中攜帶 必須叫
    	Authorization:jwt token串

drf-jwt定制返回格式

# 登錄簽發(fā)token的接口 要返回code,msg,username,token等信息
參照:jwt源碼
	from rest_framework_jwt import settings  # 配置文件
	from rest_framework_jwt.utils import jwt_response_payload_handler # 返回格式

# 對(duì)返回格式進(jìn)行定制
	1 寫(xiě)個(gè)函數(shù) 函數(shù)返回字典格式 返回的格式 會(huì)被序列化 前端看到
    	def common_response(token, user=None, request=None):
            return {
                'code':100,
                'msg':'登錄成功',
                'token':token,
                'username':user.username
            }
    2 寫(xiě)的函數(shù)在配置文件中配置
    	JWT_AUTH = {
    	'JWT_RESPONSE_PAYLOAD_HANDLER':'app01.jwt_response.common_response',
		}

drf-jwt自定義用戶表簽發(fā)

# 1 創(chuàng)建一個(gè)用戶表
	class User(models.Model):
        username = models.CharField(max_length=32)
        password = models.CharField(max_length=64)
        age = models.IntegerField()
        email = models.CharField(max_length=64)
# 2 登錄接口
    jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
    jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
	class UserView(ViewSet):
        def login(self,request):
            username = request.data.get('username')
            password = request.data.get('password')
            user = User.objects.filter(username=username,password=possword).first()
            if user:
                # 登錄成功,簽發(fā)token-->先背過(guò),
                # 1 通過(guò)user 獲取payload
                payload = jwt_payload_handler(user)
                print(payload)
                # 2 通過(guò)payload 得到token
                token = jwt_encode_handler(payload)
                return Response({'code': 100, 'msg': '登錄成功', 'username': user.username, 'token': token})
            else:
                return Response({'code': 101, 'msg': '用戶名或密碼錯(cuò)誤'})
# 3 登錄接口簽發(fā)token返回給前端

drf-jwt自定義認(rèn)證類(lèi)

# drf的認(rèn)證類(lèi)定義方式,之前學(xué)過(guò)
# 在認(rèn)證類(lèi)中,自己寫(xiě)邏輯
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
import jwt
from rest_framework_jwt.settings import api_settings
from .models import User
jwt_decode_handler = api_settings.JWT_DECODE_HANDLER

# 根據(jù)JSONWebTokenAuthentication重寫(xiě)authenticate方法
from rest_framework_jwt.authentication import JSONWebTokenAuthentication

class JWTAuthentication(BaseAuthentication):
    def authenticate(self,request):
        token = request.META.get('HTTP_TOKEN')
        # 背過(guò)
        # 校驗(yàn)token是否過(guò)期 合法 如果都通過(guò) 查詢出當(dāng)前用戶 返回
        # 如果不通過(guò) 拋異常
        try:
            payload = jwt_decode_handler(token)
            # 如果認(rèn)證通過(guò) payload就可以認(rèn)為是安全的 我們就可以使用
            user_id = payload.get('user_id')
            # 每個(gè)需要登錄后 才能訪問(wèn)的接口 都會(huì)走這個(gè)認(rèn)證類(lèi) 一旦走到這個(gè)認(rèn)證類(lèi),就會(huì)去數(shù)據(jù)庫(kù)查詢一次數(shù)據(jù)
            user = User.objects.get(pk=user_id)
            # 優(yōu)化后的
            # user = User(username=payload.get('username'),id=user_id)
            # user = {'username':payload.get('username'),'id':user_id}
        except jwt.ExpiredSignature:
            raise AuthenticationFailed('token過(guò)期')
        except jwt.DecodeError:
            raise AuthenticationFailed('解碼失敗')
        except jwt.InvalidTokenError:
            raise AuthenticationFailed('token認(rèn)證異常')
        except Exception:
            raise AuthenticationFailed('token認(rèn)證異常')
        return user,token
    
# 局部使用和全局使用

drf-jwt的簽發(fā)源碼分析

# from rest_framework_jwt.views import obtain_jwt_token
# obtain_jwt_token就是ObtainJSONWebToken.as_view()---》視圖類(lèi).as_view()

# 視圖類(lèi)
class ObtainJSONWebToken(JSONWebTokenAPIView):
    serializer_class = JSONWebTokenSerializer

# 父類(lèi):JSONWebTokenAPIView
class JSONWebTokenAPIView(APIView):
    # 局部禁用掉權(quán)限和認(rèn)證
    permission_classes = ()
    authentication_classes = ()
    def post(self, request, *args, **kwargs):
        # serializer=JSONWebTokenSerializer(data=request.data)
        serializer = self.get_serializer(data=request.data)
		# 調(diào)用序列化列的is_valid---》字段自己的校驗(yàn)規(guī)則,局部鉤子和全局鉤子
        # 讀JSONWebTokenSerializer的局部或全局鉤子
        if serializer.is_valid(): # 全局鉤子在校驗(yàn)用戶,生成token
            # 從序列化類(lèi)中取出user
            user = serializer.object.get('user') or request.user
            # 從序列化類(lèi)中取出token
            token = serializer.object.get('token')
            # 咱么定制返回格式的時(shí)候,寫(xiě)的就是這個(gè)函數(shù)
            response_data = jwt_response_payload_handler(token, user, request)
            response = Response(response_data)
            return response
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    
    
# JSONWebTokenSerializer的全局鉤子
class JSONWebTokenSerializer(Serializer):
        def validate(self, attrs):
        # attrs前端傳入的,校驗(yàn)過(guò)后的數(shù)據(jù) {username:lqz,password:lqz12345}
        credentials = {
            'username':attrs.get('username'),
            'password': attrs.get('password')
        }
        if all(credentials.values()): # 校驗(yàn)credentials中字典的value值是否都不為空
            # user=authenticate(username=前端傳入的,password=前端傳入的)
            # auth模塊的用戶名密碼認(rèn)證函數(shù),可以傳入用戶名密碼,去auth的user表中校驗(yàn)用戶是否存在
            # 等同于:User.object.filter(username=username,password=加密后的密碼).first()
            user = authenticate(**credentials)
            if user:
                if not user.is_active:
                    msg = _('User account is disabled.')
                    raise serializers.ValidationError(msg)
                payload = jwt_payload_handler(user)
                return {
                    'token': jwt_encode_handler(payload),
                    'user': user
                }
            else:
                msg = _('Unable to log in with provided credentials.')
                raise serializers.ValidationError(msg)
        else:
            msg = _('Must include "{username_field}" and "password".')
            msg = msg.format(username_field=self.username_field)
            raise serializers.ValidationError(msg)

drf-jwt的認(rèn)證源碼分析

# from rest_framework_jwt.authentication import JSONWebTokenAuthentication
# JSONWebTokenAuthentication
class JSONWebTokenAuthentication(BaseJSONWebTokenAuthentication):
    def get_jwt_value(self, request):
        # request-->jwt 'token串'
        auth = get_authorization_header(request).split()
        # 按照空格切割之后-->auth=['jwt','token串']
        auth_header_prefix = api_settings.JWT_AUTH_HEADER_PREFIX.lower()
        if not auth:
            if api_settings.JWT_AUTH_COOKIE:
                return request.COOKIES.get(api_settings.JWT_AUTH_COOKIE)
            return None
        if smart_text(auth[0].lower()) != auth_header_prefix:
            return None
        if len(auth) == 1:
            msg = _('Invalid Authorization header. No credentials provided.')
            raise exceptions.AuthenticationFailed(msg)
        elif len(auth) > 2:
            msg = _('Invalid Authorization header. Credentials string '
                    'should not contain spaces.')
            raise exceptions.AuthenticationFailed(msg)
        return auth[1] # auth取索引1 ---> token串

# 因?yàn)槲覀冎貙?xiě)了authenticate
# JSONWebTokenAuthentication中沒(méi)有要從父類(lèi)中查找
# 父類(lèi)中找:BaseJSONWebTokenAuthentication---》authenticate,找到了
    def authenticate(self, request):
        # 調(diào)JSONWebTokenAuthentication中的get_jwt_value
        # 拿到前端傳入的token串
        jwt_value = self.get_jwt_value(request)
        # 如果前端沒(méi)傳 返回None,request.user中就沒(méi)有當(dāng)前登錄用戶
        # 如果前端沒(méi)有攜帶token,也能進(jìn)入到視圖類(lèi)的方法中執(zhí)行,控制不住登錄用戶
        # 所以咱們才加了個(gè)權(quán)限類(lèi),來(lái)做控制
        if jwt_value is None:
            return None
        try:
            payload = jwt_decode_handler(jwt_value)
        except jwt.ExpiredSignature:
            msg = _('Signature has expired.')
            raise exceptions.AuthenticationFailed(msg)
        except jwt.DecodeError:
            msg = _('Error decoding signature.')
            raise exceptions.AuthenticationFailed(msg)
        except jwt.InvalidTokenError:
            raise exceptions.AuthenticationFailed()
        # 調(diào)用authenticate_credentials通過(guò)payload會(huì)返回當(dāng)前登錄用戶
        user = self.authenticate_credentials(payload)
        return (user, jwt_value)
    
# 如果用戶不攜帶token,也能認(rèn)證通過(guò)
# 所以我們必須加個(gè)權(quán)限類(lèi)來(lái)限制
from rest_framework.permissions import IsAuthenticated # 是否認(rèn)證通過(guò)
class IsAuthenticated(BasePermission):
    def has_permission(self, request, view):
        # 必須有當(dāng)前登錄用戶且已經(jīng)完成認(rèn)證
        return bool(request.user and request.user.is_authenticated)

到了這里,關(guān)于drf——jwt的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [Daimayuan] 三段式(C++,數(shù)組前綴和)

    有一個(gè)長(zhǎng)度為 n n n 的序列,現(xiàn)在我們想把它切割成三段(每一段都是連續(xù)的),使得每一段的元素總和都相同,請(qǐng)問(wèn)有多少種不同的切割方法 輸入描述 第一行給出一個(gè)數(shù) n n n ,( 1 ≤ n ≤ 1 0 5 1≤n≤10^5 1 ≤ n ≤ 1 0 5 ) 第二行給出序列 a 1 a_1 a 1 ? , a 2 a_2 a 2 ? , a 3 a_3 a 3 ?

    2024年02月05日
    瀏覽(17)
  • 電力系統(tǒng)電流三段式保護(hù)MATLAB仿真模型

    電力系統(tǒng)電流三段式保護(hù)MATLAB仿真模型

    完整資源請(qǐng)查看主頁(yè)置頂博客(專(zhuān)享優(yōu)惠) 整體模型如下: Matlab/Simulink搭建的電力系統(tǒng)電流保護(hù)模型采用輻射型單電源供電的運(yùn)行方式 Ⅰ段保護(hù)的搭建 Ⅰ段保護(hù)為瞬時(shí)速斷保護(hù),根據(jù)Ⅰ段整定原則確定整定值。線路發(fā)生短路故障時(shí),短路電流急劇增大;超過(guò)設(shè)置的整定值時(shí)

    2024年02月14日
    瀏覽(22)
  • Verilog基礎(chǔ):三段式狀態(tài)機(jī)與輸出寄存

    Verilog基礎(chǔ):三段式狀態(tài)機(jī)與輸出寄存

    相關(guān)閱讀 Verilog基礎(chǔ) https://blog.csdn.net/weixin_45791458/category_12263729.html ? ? ? ? 對(duì)于Verilog HDL而言,有限狀態(tài)機(jī)(FSM)是一種重要而強(qiáng)大的模塊,常見(jiàn)的有限狀態(tài)機(jī)書(shū)寫(xiě)方式可以分為一段式,二段式和三段式,筆者強(qiáng)烈建議使用三段式因?yàn)檫@樣能使?fàn)顟B(tài)機(jī)邏輯清晰且易于維護(hù)。 ? ?

    2024年02月04日
    瀏覽(22)
  • 三段式電流保護(hù)與自動(dòng)重合閘MATLAB仿真模型

    三段式電流保護(hù)與自動(dòng)重合閘MATLAB仿真模型

    微 ? 關(guān)注“電氣仔推送”獲得資料(專(zhuān)享優(yōu)惠) 前加速、后加速的區(qū)別: 前加速是保護(hù)裝置不判別是永久性故障還是瞬時(shí)故障,直接跳閘,然后經(jīng)重合閘裝置來(lái)糾正;后加速是保護(hù)裝置是先判別故障類(lèi)型有選擇性跳閘 以下只敘述后加速的相關(guān)內(nèi)容,前加速不在贅述!??!

    2024年02月02日
    瀏覽(22)
  • 【附源碼】基于fpga的自動(dòng)售貨機(jī)(三段式狀態(tài)機(jī))

    【附源碼】基于fpga的自動(dòng)售貨機(jī)(三段式狀態(tài)機(jī))

    目錄 1、VL38?自動(dòng)販?zhǔn)蹤C(jī)1 題目介紹 思路分析 代碼實(shí)現(xiàn) 仿真文件 2、VL39?自動(dòng)販?zhǔn)蹤C(jī)2 題目介紹: 題目分析 代碼實(shí)現(xiàn) 仿真文件 3、狀態(tài)機(jī)基本知識(shí) ????????設(shè)計(jì)一個(gè)自動(dòng)販?zhǔn)蹤C(jī),輸入貨幣有三種,為0.5/1/2元,飲料價(jià)格是1.5元,要求進(jìn)行找零,找零只會(huì)支付0.5元。 ps: ??

    2024年02月01日
    瀏覽(18)
  • Verilog寫(xiě)狀態(tài)機(jī)的三種描述方式之三段式

    狀態(tài)機(jī)的設(shè)計(jì)思路: 一是從狀態(tài)機(jī)變量入手,分析各個(gè)狀態(tài)的輸入、狀態(tài)轉(zhuǎn)移和輸出; 二是先確定電路的輸出關(guān)系,再回溯規(guī)劃每個(gè)狀態(tài)的條件、輸入等; 狀態(tài)機(jī)的三要素是狀態(tài)、輸入和輸出 , 根據(jù)狀態(tài)機(jī)狀態(tài)是否和輸入條件相關(guān),可以分為Moore型狀態(tài)機(jī)(與輸入無(wú)關(guān))和

    2024年02月14日
    瀏覽(33)
  • 【狀態(tài)機(jī)設(shè)計(jì)】Moore、Mealy狀態(tài)機(jī)、三段式、二段式、一段式狀態(tài)機(jī)書(shū)寫(xiě)規(guī)范

    【狀態(tài)機(jī)設(shè)計(jì)】Moore、Mealy狀態(tài)機(jī)、三段式、二段式、一段式狀態(tài)機(jī)書(shū)寫(xiě)規(guī)范

    目錄 狀態(tài)機(jī)介紹 狀態(tài)機(jī)類(lèi)型 Moore 型狀態(tài)機(jī) Mealy 型狀態(tài)機(jī) 狀態(tài)機(jī)設(shè)計(jì)流程 自動(dòng)售賣(mài)機(jī) 狀態(tài)機(jī)設(shè)計(jì):3 段式(推薦) 實(shí)例 實(shí)例 狀態(tài)機(jī)修改:2 段式 實(shí)例 狀態(tài)機(jī)修改:1 段式(慎用) 實(shí)例 狀態(tài)機(jī)修改:Moore 型 實(shí)例 實(shí)例 ? 有限狀態(tài)機(jī)(Finite-State Machine,F(xiàn)SM),簡(jiǎn)稱(chēng)狀態(tài)機(jī),是

    2024年02月03日
    瀏覽(65)
  • web學(xué)習(xí)--登錄認(rèn)證--會(huì)話技術(shù)--cookie--session--令牌--java-jwt使用--jjwt使用

    web學(xué)習(xí)--登錄認(rèn)證--會(huì)話技術(shù)--cookie--session--令牌--java-jwt使用--jjwt使用

    前置學(xué)習(xí): http springmvc 會(huì)話:用戶打開(kāi)瀏覽器,訪問(wèn)web服務(wù)器資源,會(huì)話建立,直到有一方斷開(kāi)連接會(huì)話結(jié)束,一次會(huì)話可以多次請(qǐng)求和連接 會(huì)話跟蹤:一種維護(hù)瀏覽器狀態(tài)的方式,服務(wù)器需要識(shí)別多次請(qǐng)求是否來(lái)自同一瀏覽器,以便同一次會(huì)話多次請(qǐng)求間共享數(shù)據(jù)。 cooki

    2024年02月15日
    瀏覽(50)
  • 【零基礎(chǔ)玩轉(zhuǎn)BLDC系列】無(wú)刷直流電機(jī)無(wú)位置傳感器三段式啟動(dòng)法詳細(xì)介紹及代碼分享

    無(wú)刷直流電動(dòng)機(jī)基本轉(zhuǎn)動(dòng)原理等內(nèi)容請(qǐng)參考《基于霍爾傳感器的無(wú)刷直流電機(jī)控制原理》、《基于反電動(dòng)勢(shì)過(guò)零檢測(cè)法的無(wú)刷直流電機(jī)控制原理》與《以GD32F30x為例定時(shí)器相關(guān)功能詳解》,BLDC基本原理及基礎(chǔ)知識(shí)本篇不再贅述。 直流無(wú)刷電機(jī)由于定子繞組的反電動(dòng)勢(shì)與電機(jī)的

    2023年04月08日
    瀏覽(30)
  • 3-1. SpringBoot項(xiàng)目集成【用戶身份認(rèn)證】實(shí)戰(zhàn) 【技術(shù)選型篇】基于Session、Token、JWT怎么選?

    3-1. SpringBoot項(xiàng)目集成【用戶身份認(rèn)證】實(shí)戰(zhàn) 【技術(shù)選型篇】基于Session、Token、JWT怎么選?

    通過(guò)第二章2-2. SpringBoot API開(kāi)發(fā)詳解 --SpringMVC注解+封裝結(jié)果+支持跨域+打包,我們實(shí)現(xiàn)了基于SpringBoot項(xiàng)目的 API接口開(kāi)發(fā) ,并實(shí)現(xiàn) API結(jié)果統(tǒng)一封裝、支持跨域請(qǐng)求 等等功能,接下來(lái)開(kāi)始第三章,主要做用戶身份認(rèn)證,主要實(shí)現(xiàn)一套 統(tǒng)一鑒權(quán)的用戶身份認(rèn)證的機(jī)制 。 我已經(jīng)提

    2024年01月22日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包