Django登录后异常重定向至/undefined问题排查求助
Django登录后意外重定向到/undefined的问题排查
问题描述
我用Django搭建了一个简单的登录表单,登录功能本身能成功,但登录完成后会出现意外重定向,最终跳到/undefined路径。不过直接访问http://localhost:8000/accounts/login/进行登录时,就不会出现这个问题,能正常重定向到首页/。
相关代码片段
login.html代码
<form id="" method="post" action="{% url 'login' %}" class="form" role="form"> {% csrf_token %} {% bootstrap_form form %} <div class="pull-right"> <button class="btn btn-default pull-right" type="submit"></button> </div> </form>
urls.py代码
urlpatterns = [ path('', MainView.as_view(), name='main'), path('admin/', admin.site.urls), path('accounts/', include('django.contrib.auth.urls')), ]
settings.py配置
LOGIN_REDIRECT_URL = 'main'
请求日志对比
出现问题的日志(从其他页面跳转登录的情况)
[19/Jul/2019 13:09:53] "GET /accounts/login/ HTTP/1.1" 200 956 # 点击提交按钮 [19/Jul/2019 13:09:54] "POST /accounts/login/ HTTP/1.1" 302 0 [19/Jul/2019 13:09:54] "GET / HTTP/1.1" 200 2496 Not Found: /undefined [19/Jul/2019 13:09:54] "GET /undefined HTTP/1.1" 404 2189
正常的日志(直接访问登录页登录)
[19/Jul/2019 13:57:51] "GET /accounts/login/ HTTP/1.1" 200 953 [19/Jul/2019 13:57:55] "POST /accounts/login/ HTTP/1.1" 302 0 [19/Jul/2019 13:57:55] "GET / HTTP/1.1" 200 2496
原因分析
从日志对比能明显看出来,正常登录流程到访问/就结束了,但出问题的流程里,在成功加载首页之后,浏览器又主动发起了/undefined的请求——这基本可以排除是Django后端的问题,问题大概率出在前端代码上:
- 你应该是从某个其他页面跳转到登录页的,而那个页面的JavaScript代码在处理登录相关逻辑时,错误地读取了一个未定义(
undefined)的变量作为跳转路径,导致浏览器自动发起了这个无效请求。 - 另外,检查登录页面本身的前端脚本(如果有的话):有没有监听表单提交的额外事件?或者页面加载时有没有自动执行的跳转逻辑?比如尝试获取某个不存在的URL参数、DOM元素属性,结果拿到了
undefined,然后直接把它拼进了URL里。 - 还有一种常见情况:登录按钮或者页面里的其他元素绑定了双重行为——除了表单的默认提交,还触发了另一个JS函数,这个函数里的跳转逻辑出错,指向了
undefined对应的路径。
解决方案
- 先检查触发登录的页面(也就是你点击登录按钮跳转到登录页的那个页面)的前端代码,看看有没有处理登录状态的JS逻辑,特别是涉及到跳转的部分,排查是否有变量未定义就被用作URL的情况。
- 检查登录页面
login.html里的其他前端脚本(如果有的话),看看是否有页面加载完成后自动执行的跳转代码,或者监听表单提交事件的额外逻辑,是否存在错误的路径处理。 - 可以用浏览器的开发者工具(F12)的网络面板,查看
/undefined请求的发起者,看看是哪个脚本或者元素触发了这个请求,这样能快速定位问题所在。
内容的提问来源于stack exchange,提问作者aze
相关产品推荐
相关产品推荐

