Python Web框架Django怎么使用jwt获取用户信息
发表于:2024-10-01 作者:千家信息网编辑
千家信息网最后更新 2024年10月01日,这篇文章主要介绍"Python Web框架Django怎么使用jwt获取用户信息",在日常操作中,相信很多人在Python Web框架Django怎么使用jwt获取用户信息问题上存在疑惑,小编查阅了各
千家信息网最后更新 2024年10月01日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安全错误
数据库的锁怎样保障安全
服务器的维护和安全
苏州名硕电脑软件开发工程师
前端软件开发有用吗
腾讯云服务器学生账号密码
校园网络安全的案例分析
面对数据库发展我们该怎么做
数据库安全设置措施
gank专利数据库
数据库在表前加序列号
邯郸工业软件开发公司
烟草系统网络安全
电信涉诈数据库
网络安全法的亮点主要包括
关于大学生网络安全的图片
互联网是不是高科技
软件开发中澄清是什么意思
软件开发第三方银行接口
车联网网络安全态势感知系统
苏州crm软件开发服务费
重启金仓数据库服务命运
软件开发失败了怎么做账
清华大学人才数据库
保障国庆期间网络安全
从数据库删除一万条数据
全友家私软件开发
销售串口联网服务器公司
云南思燃软件开发
长春游戏软件开发工资待遇
智慧园区用什么数据库
软件开发哪家有实力