Python Web框架Django怎么使用jwt获取用户信息
发表于:2024-09-30 作者:千家信息网编辑
千家信息网最后更新 2024年09月30日,这篇文章主要介绍"Python Web框架Django怎么使用jwt获取用户信息",在日常操作中,相信很多人在Python Web框架Django怎么使用jwt获取用户信息问题上存在疑惑,小编查阅了各
千家信息网最后更新 2024年09月30日Python Web框架Django怎么使用jwt获取用户信息
这篇文章主要介绍"Python Web框架Django怎么使用jwt获取用户信息",在日常操作中,相信很多人在Python Web框架Django怎么使用jwt获取用户信息问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Python Web框架Django怎么使用jwt获取用户信息"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
undefined
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 datetime JWT_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方法的参数
到此,关于"Python Web框架Django怎么使用jwt获取用户信息"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
登录
用户
信息
页面
拦截器
框架
安全
方法
学习
服务
认证
验证
前端
状态
存储
配置
成功
令牌
安全性
接口
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库模型设计目的
网络安全前景图片
未来通信网络技术展望
嵌入式软件开发常用算法
全国党员信息数据库
网络安全与保密题库
缘汇软件开发公司
北京捷钱网络技术有限公司
江西戴尔服务器续保一年多少钱
房山区服务器回收
甘肃智慧团建软件开发专业制作
网络技术支撑电信面试
日常生活中数据库系统
文件夹access数据库
数字法院网络安全形势
商务局网络安全宣传周活动方案
武软计算机网络技术专业怎么样
大学学生网络安全培训
无纸化网络技术
株洲快速软件开发哪家好
什么样的软件开发是高新技术
香港网络安全条件
康斯坦丁下载软件开发
汉中软件开发汉中软件
网络安全公益宣传短视频怎么制作
数字法院网络安全形势
网络安全主题黑板报花边
信息网络安全就业方向
维护网络安全的措施有哪几个
温州网络技术支持公司