Django的1.3版本包括RemoteUserMiddleware
和
RemoteUserBackend
类来允许Apache进行身份验证。
见http://docs.djangoproject.com/en/dev/howto/auth-remote-user/
我有首字母_数据.json它在执行syncdb时创建一个超级用户。dumpdata证实了这一点。在
但是我发现它似乎不能用新创建的数据库正确登录。我得到一个未配置的异常,它说: Django远程用户身份验证中间件需要安装身份验证中间件。在
Edit your MIDDLEWARE_CLASSES setting to insert django.contrib.auth.middleware.AuthenticationMiddleware' before the RemoteUserMiddleware class.
回溯指向RemoteMilddleware.process_request()
:
Apache的调试输出显示,设置实际上按请求的顺序有AuthenticationMiddleware
和{
MIDDLEWARE_CLASSES
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.RemoteUserMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
但是请求.用户属性未设置,生成异常。在
如果我仔细看看django.contrib.auth公司.后端和中间件,
我发现AuthenticationMiddleware
正在为注册LazyUser
请求类。但是RemoteUserBackend
似乎没有
调用authenticate()方法,远程用户在Users表中查找该方法。在
我需要做些什么来让authenticate()
被调用以便创建请求.user?在
我可以根据需要提供更多信息。顺便说一下,这是使用SSL。有没有一些我没料到的互动?在
我应该提到我使用的是Apache2.2.14和mod_wsgi
。在
这是一个丑陋的解决办法。在
我创建了一个单元测试用例,它在股票开发环境中运行良好。基于此,我在Apache服务器上使用了上面提到的
RemoteMilddleware.process_request()
函数,并禁用了user
属性的测试。然后它工作得很好。。。在我不打算选择这个作为答案,但是我想我应该为其他被阻止的人记录这个解决方法。我会查一查缺陷报告。在
有人知道一个正确的解决方案或者如何在Apache2中攻击它?所有的回溯和变量信息都表明Apache正确地设置了远程用户,但是Django1.3没有正确地使用它来进行身份验证。在
我也遇到了同样的问题,经过一点调试,我发现我忘了为auth和其他应用创建mysql表(我认为sqllite也是这样)。所以如果你没有,你需要运行python管理.py或者用其他方法创建它们
相关问题 更多 >
编程相关推荐