首页 > 其他分享 >Django自定义中间件验证用户token信息

Django自定义中间件验证用户token信息

时间:2023-08-21 18:23:27浏览次数:32  
标签:userid 自定义 中间件 request Django token print import

1.新建middleware.py

from django.urls import reverse
from rest_framework.response import Response

from utils.token import check_token
from django.http import JsonResponse, HttpResponseRedirect

from yshop.models import MyUser

try:
    from django.utils.deprecation import MiddlewareMixin  # Django 1.10.x
except ImportError:
    MiddlewareMixin = object

# 白名单,表示请求里面的路由时不验证登录信息
API_WHITELIST = ['/login/’]


class AuthorizeMiddleware(MiddlewareMixin):
    def process_request(self, request):
        print("INFO: middleware process request.")
        print("INFO: request url: ", request.path)
        if not any(api in request.path for api in API_WHITELIST):
            # if request.path not in API_WHITELIST:
            # 从请求头中获取 username 和 token
            userid = request.META.get('HTTP_USERNAME')
            token = request.META.get('HTTP_AUTHORIZATION')
            print('mid-userid', userid)
            print('mid-token', token)
            if userid is None or token is None:
                print('ERROR: 未查询到登录信息')
                return JsonResponse({'code': 404, 'msg': '未查询到登录信息'})
            else:
                user_info = MyUser.objects.filter(token=token)
                if not user_info.exists():
                    return JsonResponse({'code': 403, 'msg': '未找到token信息'})
                # 调用 check_token 函数验证
                if check_token(userid, token):
                    pass
                else:
                    print('Error: 登录信息错误或已过期')
                    return JsonResponse({'code': 403,
                                         'msg': '登录信息错误或已过期'})

  2.在settings.py中配置中间件:

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'Myproject.middleware.AuthorizeMiddleware',

]

  注意哦,跨域的中间件必须放在第一个!

标签:userid,自定义,中间件,request,Django,token,print,import
From: https://www.cnblogs.com/lytcreate/p/17646742.html

相关文章

  • Django 基于DRF的列表增删改查
    基于DRF的列表增删改查目录基于DRF的列表增删改查1表结构2基于APIView实现对course表获取所有数据,增加数据2.1ser2.2views2.3urls3基于ListAPIView、CreateAPIView实现获取所有数据,增加数据3.1ser3.2views3.3urls4基于ModelViewSet实现Course表实现增删改查4.1ser4.2......
  • SpringBoot复习:(37)自定义ErrorController
    所有接口统一返回的数据格式packagecn.edu.tju.domain;publicclassMyResponse{privateintcode;privateStringmessage;privateStringexception;privateStringstack;publicintgetCode(){returncode;}publicvoidse......
  • Django 解决同源跨域问题
    Django解决同源跨域问题目录Django解决同源跨域问题1sitea1.1urls配置1.2app01.views配置1.3index.html配置2siteb2.1urls配置2.2app01.views配置由于浏览器具有同源策略的限制:在发送Ajax请求时,如果当前浏览器的URL是a.com,而页面中向b.com发送ajax请求,请求可以正......
  • django 上传文件
    前后端分离下django框架上传文件实现方式实现方式一,通过model字段FileFiled()来实现model类classReport(models.Model):p_id=models.PositiveIntegerField('病人ID')file=models.FileField(upload_to='uploads/report/%Y/%m/%d/')def__str__(self):......
  • 利用pycharm创建第一个django API项目
    From:  ICT浪子 ICT浪子 2023-08-1916:34 发表于湖北---------------------------------------------------------------------------一、pycharm操作1、打开PyCharm,进入欢迎界面。2、点击"CreateNewProject"或选择"File"->"NewProject"。3、在新项目对话框中,......
  • 前端项目实战壹佰柒拾陆react-admin+material ui-react-admin之Create之构建自定义字
    我是歌谣微信公众号关注前端小歌谣import{useRecordContext,Show,SimpleShowLayout}from'react-admin';constBookAuthor=()=>{constrecord=useRecordContext();if(!record)returnnull;return<span>{record.author}</span>;};......
  • 【算法】用c#实现自定义字符串编码及围栏解码方法
    编写一个函数/方法,它接受2个参数、一个字符串和轨道数,并返回ENCODED字符串。编写第二个函数/方法,它接受2个参数、一个编码字符串和轨道数,并返回DECODED字符串。然后使用围栏密码对其进行解码。这种密码用于通过将每个字符沿着一组“竖状轨道”依次放在对角线上来对字符串进行编......
  • C# .NET 使用HttpClient,以及自定义Header中存在特殊字符的处理方式
    平常我们在使用HttpClient时,只需要创建加上设置调用接口地址就可以使用了,比如:HttpClienthttpClient=httpClientFactory.CreateClient();httpClient.BaseAddress=newUri(接口地址);httpClient.PostAsync(接口方法,HttpContent);但是,在自定义Header......
  • Express - 中间件
    中间件编写中间件函数可以接受三个参数,req(请求),res(响应)和next(下一个中间件函数)。如果这个中间件不结束请求/响应循环,就需要调用next函数。先装载的中间件函数会被先执行,如果忘记调用next函数,会导致后装载的中间件被忽略。使用中间件应用层中间件可以使用app.use()和app.MET......
  • 前端vue自定义柱形图 选中更改柱形图颜色及文字标注颜色
    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随意的进行组合。大大提升开发效率......