自定義Django_rest_framework_jwt登陸錯(cuò)誤返回

在使用Django做前端后端項(xiàng)目時(shí),登陸認(rèn)證方法往往使用的是jwt_token,但是想自定義登陸成功和失敗的返回體。

1.當(dāng)用戶名和密碼正確就會(huì)生成token,返回response是調(diào)用的是JWT_RESPONSE_PAYLOAD_HANDLER,如果想自定義返回體就需要重寫(xiě)jwt_response_payload_handler函數(shù)。

在項(xiàng)目目錄下settings.py中,添加JWT_RESPONSE_PAYLOAD_HANDLER。

JWT_AUTH={'JWT_EXPIRATION_DELTA':datetime.timedelta(seconds=6000),'JWT_RESPONSE_PAYLOAD_HANDLER':'Users.views.jwt_response_payload_handler',# 后面跟著你視圖里定義函數(shù)}


自定義一個(gè)視圖編輯jwt_response_payload_handler。

defjwt_response_payload_handler(token,user=None,request=None):"""

? ? 設(shè)置jwt登陸返回的格式

? ? :param token:

? ? :param user:

? ? :param request:

? ? :return:

? ? """return{"msg":"success","status":200,"data":[{# data自定義你接口想返回的信息'token':token,'username':user.username}]}


現(xiàn)在的效果如下:

2. Django中jwt錯(cuò)誤返回的是{"non_field_errors":["無(wú)法使用提供的認(rèn)證信息登錄。"]},當(dāng)用戶名或密碼錯(cuò)誤時(shí),是不會(huì)去調(diào)用jwt_response_payload_handler,那么失敗時(shí)調(diào)用的是什么函數(shù)了,JWT_RESPONSE_PAYLOAD_ERROR_HANDLER,但是發(fā)現(xiàn)這個(gè)方法并沒(méi)有合到master分支,那么我們就需要手動(dòng)給他合并進(jìn)去。

我們打開(kāi)/usr/local/lib/python3.6/site-packages/rest_framework_jwt/settings.py在IMPORT_STRINGS中添加JWT_RESPONSE_PAYLOAD_ERROR_HANDLER:

/usr/local/lib/python3.6/site-packages/rest_framework_jwt/views.py中修改:

我們?cè)谧约旱囊晥D里編寫(xiě)一個(gè)jwt_response_payload_error_handler函數(shù)

defjwt_response_payload_error_handler(serializer,request=None):return{"msg":"用戶名或者密碼錯(cuò)誤","status":400,"detail":serializer.errors}


最后我們?cè)谖覀冺?xiàng)目的settings.py的JWT中添加錯(cuò)誤返回的函數(shù):

# jwt_token配置JWT_AUTH={'JWT_EXPIRATION_DELTA':datetime.timedelta(seconds=6000),# 登陸成功自定義 的返回結(jié)構(gòu)'JWT_RESPONSE_PAYLOAD_HANDLER':'Users.views.jwt_response_payload_handler',# 登陸失敗時(shí)自定義的返回結(jié)構(gòu)'JWT_RESPONSE_PAYLOAD_ERROR_HANDLER':'Users.views.jwt_response_payload_error_handler',}


最后的樣子就成為這樣:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容