Django:权限验证中间件如何使用

有时候我们需要在访问页面前进行权限验证,比如有些页面是需要在登录后才能进行访问,如个人中心、我的订单等。

一.后端配置中间件

1.检验逻辑

创建一个middleware.py,在里面写上检验的逻辑

复制代码
from django.http import JsonResponse
from users.models import User

class CookieAuthMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 检查请求是否为登录请求
        if request.path == '/login/':
            return self.get_response(request)

        mobile = request.COOKIES.get('mobile')
        if mobile:
            try:
                user = User.objects.get(mobile=mobile)
                request.user = user
            except User.DoesNotExist:
                return JsonResponse({'detail': 'Unauthorized'}, status=401)
        else:
            return JsonResponse({'detail': 'Unauthorized'}, status=401)

        response = self.get_response(request)
        return response

对登录操作则不进行检验

2.配置中间件

复制代码
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

    'utils.middleware.CookieAuthMiddleware',
]

实际路径跟自己项目匹配,我是把中间件的文件放在了utils文件夹里

3.运行效果

可以看到这里未登录状态访问我的订单已经返回了401

二.前端页面跳转

然后我们在页面的js里配置响应拦截,如果检测到返回响应为401,则说明用户未登录,就给他跳转到登录界面

复制代码
mounted: function(){
    axios.interceptors.response.use(
        response => {
            return response;
        },
        error => {
            if (error.response && error.response.status === 401) {
                window.location.href = 'http://127.0.0.1:8080/login.html';
            } else {
                return Promise.reject(error);
            }
        }
    );}

这时我们在未登录状态下访问就会跳转到登录界面

相关推荐
秋邱1 小时前
AR 应用流量增长与品牌 IP 打造:从被动接单到主动获客
开发语言·人工智能·后端·python·ar·restful
ID_1800790547310 小时前
基于 Python 的 Cdiscount 商品详情 API 调用与 JSON 核心字段解析(含多规格 SKU 提取)
开发语言·python·json
Q_Q51100828510 小时前
python+django/flask+vue的大健康养老公寓管理系统
spring boot·python·django·flask·node.js
我是哈哈hh10 小时前
【Python数据分析】Numpy总结
开发语言·python·数据挖掘·数据分析·numpy·python数据分析
Michelle802310 小时前
24大数据 14-2 函数练习
开发语言·python
qq_3814549910 小时前
Python学习技巧
开发语言·python·学习
Ndmzi11 小时前
Matlab编程技巧:自定义Simulink菜单(理解补充)
前端·javascript·python
dagouaofei11 小时前
AI生成个性化年终总结PPT
人工智能·python·powerpoint
white-persist12 小时前
VSCode 快捷键大全:从设计理念到场景化高效运用(详细解析)(文章末尾有vim快捷键大全)
linux·ide·vscode·python·编辑器·系统安全·vim
liliangcsdn12 小时前
python threading异步并发调用示例
python