电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Django如何使用jwt獲取用戶信息

瀏覽:214日期:2024-10-10 09:44:42

HTTP請求是無狀態的,我們通常會使用cookie或session對其進行狀態保持,cookie存儲在客戶端,容易被用戶誤刪,安全性不高,session存儲在服務端,在服務器集群情況下需要解決session不共享的問題,常用的解決方案有4種:客戶端Cookie保存、服務器間Session同步、使用集群管理Session、把Session持久化到數據庫。

jwt:json web token

在用戶注冊登錄后,記錄用戶登錄狀態,我們可以用cookie和session來做狀態保持,cookie存儲在客戶端,安全性低,session存儲在服務器端,安全性高,但是在分布式架構中session不能同步化,所以我們用jwt來驗證接口安全

組成:頭部 載荷 簽證

Jwt服務端不需要存儲token串,用戶請求時攜帶著經過哈希加密和base64編碼后的字符串過來,服務端通過識別token值判斷用戶信息、過期時間等信息,在使用期間內不可能取消令牌或更改令牌權限。

jwt的安裝與配置

# 安裝 pip install djangorestframework-jwtFrom rest_framework_jwt.authentication import JSONWebTokenAuthenticationSettings.pyINSTALLED_APPS = [ ’’’ ’rest_framework.authtoken’, ’’’]################### 2、配置jwt驗證 ######################REST_FRAMEWORK = { # 身份認證 ’DEFAULT_AUTHENTICATION_CLASSES’: ( ’rest_framework_jwt.authentication.JSONWebTokenAuthentication’, ’rest_framework.authentication.SessionAuthentication’, ’rest_framework.authentication.BasicAuthentication’, ),}import datetimeJWT_AUTH = { ’JWT_AUTH_HEADER_PREFIX’: ’JWT’, ’JWT_EXPIRATION_DELTA’: datetime.timedelta(days=1),}AUTH_USER_MODEL=’app.User’ # 指定使用APP中的 model User進行驗證

在django中,我們用內置的User表做登錄功能

from rest_framework_jwt.views import obtain_jwt_token # 驗證密碼后返回tokenurlpatterns = [ re_path(r’v1/login/$’, obtain_jwt_token,name=’login’), # 用戶登錄后返回token]

前端獲取到token并且setitem

var token = ’JWT ’ + data.tokenlocalStorage.setItem(’token’, token);

在我們封裝的攔截器里有請求攔截器和響應攔截器,需要在每次發起請求的時候獲取token

import Axios from ’axios’import { Toast } from ’vant’;import URLS from ’../../config/urls’ //1、使用自定義配置新建一個 axios 實例const instance = Axios.create({ baseURL: URLS.API_URL, responseType: ’json’,}); //2、添加請求攔截器:每次發送請求就會調用此攔截器,添加認證tokeninstance.interceptors.request.use( config => { //發送請求前添加認證token, console.log(localStorage.getItem(’token’)) config.headers.Authorization = localStorage.getItem(’token’); # 獲取token // config.headers.Authorization = sessionStorage.getItem(’token’) return config }, err => { return Promise.reject(err) }); // 3、響應攔截器instance.interceptors.response.use( response => { if (response.status === 200) { return Promise.resolve(response); } else { return Promise.reject(response); } }, // 服務器狀態碼不是200的情況 error => { if (error.response.status) { switch (error.response.status) {// 401: 未登錄// 未登錄則跳轉登錄頁面,并攜帶當前頁面的路徑// 在登錄成功后返回當前頁面,這一步需要在登錄頁操作。case 401: router.replace({ path: ’/login’, query: { redirect: router.currentRoute.fullPath } }); break;// 403 token過期// 登錄過期對用戶進行提示// 清除本地token和清空vuex中token對象// 跳轉登錄頁面case 403: Toast({ message: ’登錄過期,請重新登錄’, duration: 1000, forbidClick: true }); // 清除token localStorage.removeItem(’token’); store.commit(’loginSuccess’, null); // 跳轉登錄頁面,并將要瀏覽的頁面fullPath傳過去,登錄成功后跳轉需要訪問的頁面 setTimeout(() => { router.replace({ path: ’/login’, query: {redirect: router.currentRoute.fullPath } }); }, 1000); break;// 404請求不存在case 404: Toast({ message: ’網絡請求不存在’, duration: 1500, forbidClick: true }); break;// 其他錯誤,直接拋出錯誤提示default: Toast({ message: error.response.data.message, duration: 1500, forbidClick: true }); } return Promise.reject(error.response); } }); export default instance

這樣即完成了jwt接口安全的認證

那么在python后端如何去獲取jwt并提取我們需要的信息呢?

from rest_framework_jwt.authentication import JSONWebTokenAuthentication from rest_framework.views import exception_handlerfrom rest_framework_jwt.utils import jwt_decode_handler# 獲取登陸的用戶 token = request.META.get(’HTTP_AUTHORIZATION’)[4:] token_user = jwt_decode_handler(token) user_id = token_user[’user_id’] # 獲取用戶id這個方法不用在前端封裝getitem token 或者從前端傳過來token然后獲取.vuevar formdata = { id : this.$route.params.id, // 獲取/id // this.$route.query.subid 獲取?subid=id token: localStorage.getItem(’token’), } postCreate(formdata).then(resp=>{ console.log(resp) alert(resp.mes) }).catch(err=>{ alert(err) console.log(err) }) }python views.pydef post(self,request): data = request.data # 獲取post方法的數據 # print(data) token = data.get(’token’)[4:] toke_user = jwt_decode_handler(token) user_id = toke_user[’user_id’] def get(self,request):data = request.query_params # 獲取get方法的參數

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 深圳品牌设计公司-LOGO设计公司-VI设计公司-未壳创意 | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 深圳昂为官网-气体分析仪,沼气分析仪,动态配气仪,气体传感器厂家 | U拓留学雅思一站式服务中心_留学申请_雅思托福培训 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 北京三友信电子科技有限公司-ETC高速自动栏杆机|ETC机柜|激光车辆轮廓测量仪|嵌入式车道控制器 | 优宝-汽车润滑脂-轴承润滑脂-高温齿轮润滑油脂厂家 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 仓储笼_金属箱租赁_循环包装_铁网箱_蝴蝶笼租赁_酷龙仓储笼租赁 测试治具|过炉治具|过锡炉治具|工装夹具|测试夹具|允睿自动化设备 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 密封圈_泛塞封_格莱圈-[东莞市国昊密封圈科技有限公司]专注密封圈定制生产厂家 | 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 模具硅橡胶,人体硅胶,移印硅胶浆厂家-宏图硅胶科技 | 事迹材料_个人事迹名人励志故事 学生作文网_中小学生作文大全与写作指导 | 走心机厂家,数控走心机-台州博城智能科技有限公司 | 台式恒温摇床价格_大容量恒温摇床厂家-上海量壹科学仪器有限公司 | 隧道窑炉,隧道窑炉厂家-山东艾瑶国际贸易| 仿真植物|仿真树|仿真花|假树|植物墙 - 广州天昆仿真植物有限公司 | 安徽成考网-安徽成人高考网 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 广东成考网-广东成人高考网 | 【北京写字楼出租_写字楼租赁_办公室出租网/出售】-远行地产官网 | 希望影视-高清影视vip热播电影电视剧免费在线抢先看 | 硅胶管挤出机厂家_硅胶挤出机生产线_硅胶条挤出机_臣泽智能装备 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 伟秀电气有限公司-10kv高低压开关柜-高低压配电柜-中置柜-充气柜-欧式箱变-高压真空断路器厂家 | 烟气换热器_GGH烟气换热器_空气预热器_高温气气换热器-青岛康景辉 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | loft装修,上海嘉定酒店式公寓装修公司—曼城装饰 | 点胶机_点胶阀_自动点胶机_智能点胶机_喷胶机_点胶机厂家【欧力克斯】 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | Duoguan 夺冠集团 | 鲁网 - 山东省重点新闻网站,山东第一财经门户 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 雷达液位计_超声波风速风向仪_雨量传感器_辐射传感器-山东风途物联网 | 隧道窑炉,隧道窑炉厂家-山东艾瑶国际贸易 | 自动化改造_智虎机器人_灌装机_贴标机-上海圣起包装机械 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 |