Django身份验证中间件一致拒绝登录

时间:2010-10-30 00:58:23

标签: django authentication

前言:几年前我自学了如何使用Django,开发了一个webapp,将密钥交给了我的客户,从那时起就没有对应用程序做太多工作,也没有用Django开发然后

问题

许多用户无法成功登录,对于受影响的人来说,这似乎是一个长期存在的问题。但是,我不能为我的生活找出这些用户的共同点。他们使用不同的操作系统,不同的浏览器,在一天/一周/一个月的不同时间访问网站。这是一个可靠的失败,似乎根本不遵循模式。

具体细节信息

webapp在Windows,Django 1.0上运行,并使用MySQL作为数据库。会话存储在数据库中。

消除可能的原因

遗憾的是,这不是“错误的用户名/密码”问题。这很容易。不,此webapp的数千名用户使用相同的用户名和密码。 (不是我的偏好或选择!)此外,失败的身份验证不附带用户名/密码错误消息。

现在,网站 适用于大多数用户。所以我知道基本身份验证配置是正确的:MIDDLEWARE_CLASSESINSTALLED_APPS元组包含正确的contrib行。 LOGIN_URLLOGIN_REDIRECT_URLLOGOUT_URL都已正确设置。 URL调度程序工作,视图工作等。

对于受影响的用户来说,这是一致的,持续的失败这一事实意味着它不是负载问题。

对于某些受影响的用户,使用其他浏览器可以解决问题。对于其他人,它没有。并不一定是特殊浏览器配置的问题,因为很多尝试过第二个浏览器的用户都是第一次下载/安装第二个浏览器,大概是使用默认配置。 (请注意,用户主要不是“超级用户”。)

重现错误

所有这一切中最困难的部分是我从未在任何计算机或浏览器上登录失败,因此解决调试过程非常困难。

但问题是可重复的。主客户端的计算机在登录到它并使用IE 7或8时,无法以预期的行为登录。问题:当 I 登录到同一台计算机时,无论我使用何种浏览器, 都不可重现。

为什么我要问这里

我在PHP / MySQL中完成了大部分的开发工作。当我在寻找登录问题时,我会在用户名/密码,cookie,服务器端会话,浏览器等中查找问题。我编写调试代码以将服务器/ cookie变量转储到屏幕上等。

不幸的是我不知道如何调试Django中间件。我甚至不知道这可能是什么类型的问题。

最后

我已经被困扰了好几天。几个月前,我经历了同样的事情,也是几天,之前它被认为比我的其他项目的优先级低。但现在又回来了。

我不能为我的生活看到一种模式。我希望你们中的一些人有一些建议!

EDITED

以下是一些相关代码,请求。

在settings.py

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
)

LOGIN_URL = '/login/'
LOGOUT_URL = '/logout/'
LOGIN_REDIRECT_URL = '/'
在urls.py中

(r'^login/', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),  
(r'^logout/', 'django.contrib.auth.views.logout', {'template_name': 'logout.html'}),

in login.html

{% block content %}
<h1>Please Log In</h1>
{% if form.errors %}<p>Your username and password didn't match. Please try again.</p>{% endif %}
<form method="post" action="/login/">
<p>{{ form.username.label_tag }} {{ form.username }}</p>
<p>{{ form.password.label_tag }} {{ form.password }}</p>
<p><input type="submit" value="login" /></p>
<input type="hidden" name="next" value="{{ next }}" />
</form>
{% endblock %}

2 个答案:

答案 0 :(得分:0)

错误在库存django中间件中是不太可能的,因此您不需要对其进行调试,但您可以在代码中添加一堆日志记录语句,然后再分析日志。 Python logging模块适用于此目的。

答案 1 :(得分:0)

免责声明:无论如何,我不是Django / Python专家。请给出一些一般性建议。

SQL服务器是否被挂起?也许它正在被重载,通过某种超时来删除一些登录请求。

一切服务器或多台服务器都在运行吗?如果是多个,则它们之间可能会有超时或某种同步问题。