You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django LoginRequiredMiddleware导致登录页持续重复请求求助

问题分析与解决

你遇到的重复请求循环,根源在于django-browser-reload的/reload/events/端点被LoginRequiredMiddleware拦截,触发了以下循环:

  1. 前端自动刷新脚本请求/reload/events/
  2. LoginRequiredMiddleware检测到用户未登录,返回302重定向到登录页(带next=/reload/events/参数)
  3. 登录页加载完成后,前端脚本再次发起/reload/events/请求,重复上述流程

解决方案

方法一:排除/reload/events/路径(推荐)

修改LoginRequiredMiddleware的配置或代码,允许未登录用户访问该端点:

如果你使用第三方库django-login-required-middleware

在settings.py中添加排除规则:

LOGIN_REQUIRED_EXCEPTIONS = [
    r'^/reload/events/$',
    r'^/login/$',  # 确保登录页本身也被正确排除
]

如果你是自定义的LoginRequiredMiddleware

修改中间件的process_request方法,直接放行目标路径:

from django.utils.deprecation import MiddlewareMixin
from django.conf import settings
from django.shortcuts import redirect

class LoginRequiredMiddleware(MiddlewareMixin):
    def process_request(self, request):
        # 排除无需登录的路径
        exempt_paths = ['/reload/events/', '/login/']
        if request.path in exempt_paths:
            return None
        
        # 原有登录校验逻辑
        if not request.user.is_authenticated:
            return redirect(f"{settings.LOGIN_URL}?next={request.path}")

方法二:调整中间件顺序(不推荐)

将django_browser_reload.middleware.BrowserReloadMiddleware移到login_required.middleware.LoginRequiredMiddleware之前,但这种方式无法从根本上解决端点被拦截的问题,仅作为临时替代方案。


内容的提问来源于stack exchange,提问作者mathis_dukatz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:15:07