[WEB] DRF利用JWT实现用户认证
作者:CC下载站 日期:2022-03-16 00:00:00 浏览:44 分类:站长帮
根据上一篇文章可以知道JWT的原理和意义
所以在这里分享一下jwt在drf中的应用
auth.py
将jwt写出来
import datetime
import jwt
from django.conf import settings
from jwt import exceptions
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
def create_token(payload, exp=30):
headers = {'typ': 'jwt', 'alg': 'HS256'}
payload['exp'] = datetime.datetime.utcnow() + datetime.timedelta(days=exp)
return jwt.encode(payload, settings.SECRET_KEY, "HS256", headers)
class JwtAuthentication(BaseAuthentication):
def authenticate(self, request):
# 获取请求头中Token
token = request.META.get('HTTP_TOKEN')
try:
payload = jwt.decode(token, settings.SECRET_KEY, "HS256")
except exceptions.ExpiredSignatureError:
raise AuthenticationFailed({'code': 204, 'msg': 'Token已失效'})
except jwt.DecodeError:
raise AuthenticationFailed({'code': 204, 'msg': 'Token认证失败'})
except jwt.InvalidTokenError:
raise AuthenticationFailed({'code': 204, 'msg': 'Token非法'})
return payload, token
settings.py
在drf的view中全局应用此认证方式
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": ['utils.auth.JwtAuthentication']
}
views.py
一个登录的view,将认证方式设为空,另外一个可以直接获取
# Create your views here.
from rest_framework.views import APIView
from utils.auth import create_token
from utils.commen import standard_response
class LoginView(APIView):
authentication_classes = []
@staticmethod
def post(request, *args, **kwargs):
username = request.data.get('username')
password = request.data.get('password')
if not username == 'lan' and password == 'password':
return standard_response(None, msg='用户名或密码错误')
token = create_token({'username': username})
return standard_response(data=token, msg='登陆成功')
class IndexView(APIView):
@staticmethod
def post(request, *args, **kwargs):
return standard_response(data='来源网站:www.lanol.cn', msg=f'欢迎您{request.user["username"]}')
登录获取Token
验证Token成功
Token超时失效
这个auth.py不止在drf中可用,其他的web框架,fastapi啥的也是通用的,只要将返回改一下即可
猜你还喜欢
- 03-29 [环境测试] Hexo部署GitHub Pages
- 03-22 [源码设置] 如何设置Xiuno BBS URL-Rewrite(伪静态设定)
- 03-06 [建站交流] PicGo + smms 构建图床
- 11-18 [emlog技巧] Emlog非插件显示评论者IP属地
- 11-09 [网站维护] WordPress 后台速度慢?加快仪表板速度的 15 种方法
- 11-09 [WordPress插件] 10 个最好用的 WordPress 聊天机器人插件(免费和付费)
- 11-09 [WordPress开发] 探索 WordPress 6.3 中的增强样板(Patterns)
- 11-09 [网站维护] 无需插件即可优化 WordPress 速度的 12 种策略
- 11-09 [网站安全] WordPress 安全统计:WordPress 到底有多安全?
- 09-20 [jsp技术] JSP ssm 特殊人群防走失系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
- 09-15 [Lightsail容器] AWS Lightsail VPS:一种在云中运行容器的简单方法
- 07-28 [运维笔记] 解决网站出现"SSL_ERROR_RX_RECORD_TOO_LONG"问题
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[壁纸工具] 每日必应壁纸爬取
[文件转换] Unlock Music 音乐解锁---搬运工---使用过最好的音乐格式转换全能工具
[图床工具] 百家号变免费图床
[行业软件] 超市播音系统V9.9(思维构造)——定时播放功能免费
[数码资讯] 松下Lumix S9完整细节曝光
[电视剧] [庆余年 第二季] [更至9集] [WEB-MKV] [国语中字] [4K]
[游戏娱乐] 《漫野奇谭》v1.16.535中文版
[游戏娱乐] 《奥西里斯:新黎明》v1.5.67中文版
[游戏娱乐] 《倾覆之国:最后一战》v1.0.0中文版
[文件传输] 【Android/IOS/Win】互传 EasyShare 3.6.5 零流量、极速、多平台快捷传输工具
[资料] [大学期末救急课] 猴博士+高斯课堂+斐多课堂,全集视频合集
[云资源] 价值2万元的老男孩Python教程
[书库] 史上最全摄影书推荐(附700本PDF版打包下载)
[云资源] 花了一千多元买的私人健身教程
[下载工具] Internet Download Manager 6.42.7 (IDM)
[影视] 灌篮高手 WEB-DL版下载/Slam Dunk/スラムダンク/灌篮高手:THE FIRST/灌篮高手电影版 2022 The First Slam Dunk 61.35G
[安卓软件] 酷我音乐APP_v10.7.6.4 去广告破解豪华VIP版
[即时通讯] 微信PC版WeChat 3.9.9.43 多开防撤回绿色版
[安卓软件] Solid Explorer文件管理器APP 2.8.38 破解版
[浏览器] Google Chrome v123.0.6312.59便携增强版
[云资源] 价值2万元的老男孩Python教程
[影视] 灌篮高手 WEB-DL版下载/Slam Dunk/スラムダンク/灌篮高手:THE FIRST/灌篮高手电影版 2022 The First Slam Dunk 61.35G
[云资源] 花了一千多元买的私人健身教程
[书库] 史上最全摄影书推荐(附700本PDF版打包下载)
[动画] 北斗神拳(1984) [两季合集] [MKV]
[资料] 抗战阵亡将士资料+续编
[电视剧] 三体 (2024) 全8集 网飞版本 中文字幕 合集
[纪录片] 河西走廊【10集 国语 中文字幕 1080P 10.8G MP4】
[电影] 2024年喜剧片·热辣滚烫 [mp4]
[影视] 铁爪 WEB-DL版下载 2023 The Iron Claw 23.48G
- 最新评论
-
想看全集,后传还是很有意思了erlong888 评论于:05-20 我想看看mw2ddyy 评论于:04-26 好东西阿zfy123123 评论于:04-18 谢谢楼主xiaoqi 评论于:04-12 勿在线解压,勿手机解压,请在电脑上用最新款压缩软件解压!推荐360压缩或者好压CC下载站 评论于:04-10 无法解压啊,客服能不能给个解压教程ravengrey 评论于:04-10 谢谢支持!!CC下载站 评论于:03-26 很棒的资源,感谢分享云体风身 评论于:03-26 感谢分享,好东西云体风身 评论于:03-26 谢谢支持!CC下载站 评论于:03-14
- 热门tag