Django中@login_required装饰器不生效,未登录也能访问首页如何解决?
问题原因排查方向
- 你访问的实际是根路径
/对应的welcome视图
你代码里加了@login_required装饰器的是路径/home/对应的home视图,如果你说的“首页”是站点根路径/,该路径绑定的welcome视图没有加登录校验装饰器,自然不需要登录就可以访问。请确认你测试的是/home/路径。 - 装饰器导入错误
检查login_required的导入语句是否正确,正确导入路径为from django.contrib.auth.decorators import login_required,如果导入了自定义或第三方的同名装饰器,会导致校验逻辑不生效。 - 路径配置不匹配
你settings.py中配置的LOGIN_URL = '/login'缺少末尾斜杠,和account应用urls.py中定义的login/路径不一致,虽然Django默认开启APPEND_SLASH会自动补全,但部分场景下会导致装饰器校验逻辑异常,建议将LOGIN_URL修改为'/login/'或者直接使用命名路由配置LOGIN_URL = 'login'。 - 测试环境已处于登录状态
如果你之前在当前浏览器登录过账号,本地会留存登录态cookie,会被判定为已登录状态,请切换无痕浏览窗口重新测试未登录状态下的访问逻辑。 - 根路由配置错误
检查项目根目录的urls.py中,对home应用的路由绑定是否正确,有没有出现路径和视图函数绑定错配的情况,导致你访问的路径实际没有绑定到加了装饰器的home视图上。
内容的提问来源于stack exchange,提问作者Bharath Gowda
相关产品推荐
相关产品推荐

