Django LoginRequiredMiddleware导致登录页持续重复请求求助
问题分析与解决
你遇到的重复请求循环,根源在于django-browser-reload的/reload/events/端点被LoginRequiredMiddleware拦截,触发了以下循环:
- 前端自动刷新脚本请求
/reload/events/ - LoginRequiredMiddleware检测到用户未登录,返回302重定向到登录页(带
next=/reload/events/参数) - 登录页加载完成后,前端脚本再次发起
/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
相关产品推荐
相关产品推荐

