Django配置闲置10秒会话超时后重定向到登录页报错如何解决
解决步骤
- 添加超时跳转路径配置
你当前报错的核心原因是django-session-timeout库默认的会话超时跳转路径为/accounts/login/,你的项目未配置该路由所以触发404。在settings.py中添加以下配置指定跳转至你自己的登录页:
# settings.py 新增配置 SESSION_TIMEOUT_REDIRECT = '/login/' # 也可以全局配置登录地址,配合login_required装饰器使用 LOGIN_URL = '/login/'
- 调整中间件顺序
SessionTimeoutMiddleware需要放在AuthenticationMiddleware之后才能正常获取用户认证状态,修改MIDDLEWARE顺序如下:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', # 移到此处 'django_session_timeout.middleware.SessionTimeoutMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
- 给受限视图添加登录校验
给所有需要登录才能访问的视图添加login_required装饰器,作为会话过期后的双重保障,修改views.py:
# 顶部导入装饰器 from django.contrib.auth.decorators import login_required # 登录视图保持原有逻辑不变 def login_view(request): # 原有代码无需修改 # 给需要登录权限的视图加装饰器 @login_required def admin(request): return render(request, 'admin.html') # customer、logistic、profile等其他需要登录才能访问的视图,同理全部加上@login_required装饰器
配置完成后重启服务,用户闲置10秒后刷新页面就会自动重定向到登录页。
内容的提问来源于stack exchange,提问作者Rainysky
相关产品推荐
相关产品推荐

