Django已登录状态访问首页仍跳转登录页问题排查
问题根因
- 首页视图写死了重定向逻辑,完全没有判断用户登录状态,不管用户是否已经登录,访问首页都会无条件跳转到登录页。
- 登录校验通过后直接渲染首页模板的写法不规范,没有走首页路由的状态校验逻辑,也不符合POST请求处理后重定向的常规规范,容易出现表单重复提交问题。
- 现有逻辑没有对已登录用户访问登录页的场景做处理,账号密码校验失败直接跳注册页的交互也不合理。
修复方案
修改首页视图
先读取session判断登录状态,仅未登录时才触发重定向:
def index(request): # 检查session中是否存在登录后写入的用户ID if not request.session.get('id'): return redirect('/login') # 已登录状态正常渲染首页 return render(request, 'index.html')
修改登录视图
优化查询逻辑,登录成功后重定向到首页路由,补充异常场景处理:
from django.shortcuts import render, redirect from register.models import reg def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') # 单次查询获取用户对象,避免重复查库 user_details = reg.objects.filter(username=username, password=password).first() if user_details: request.session['id'] = user_details.id request.session['username'] = user_details.username # 登录成功重定向到首页路由 return redirect('/') else: # 账号密码错误返回登录页,可增加错误提示 return render(request,'login.html', {'msg': '用户名或密码错误'}) else: # 已登录用户访问登录页直接跳首页 if request.session.get('id'): return redirect('/') return render(request, 'login.html')
注意:当前代码明文存储、校验用户密码存在严重安全隐患,生产环境建议使用Django自带的身份认证模块处理用户登录逻辑,避免安全风险。
内容的提问来源于stack exchange,提问作者Swathi
相关产品推荐
相关产品推荐

