Django RemoteUserMiddleware RemoteUserBackend与新数据库的帮助

2024-09-28 19:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

Django的1.3版本包括RemoteUserMiddlewareRemoteUserBackend类来允许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()

^{pr2}$

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。在


Tags: 中间件django用户auth身份验证远程apachecontrib
2条回答

这是一个丑陋的解决办法。在

我创建了一个单元测试用例,它在股票开发环境中运行良好。基于此,我在Apache服务器上使用了上面提到的RemoteMilddleware.process_request()函数,并禁用了user属性的测试。然后它工作得很好。。。在

我不打算选择这个作为答案,但是我想我应该为其他被阻止的人记录这个解决方法。我会查一查缺陷报告。在

有人知道一个正确的解决方案或者如何在Apache2中攻击它?所有的回溯和变量信息都表明Apache正确地设置了远程用户,但是Django1.3没有正确地使用它来进行身份验证。在

我也遇到了同样的问题,经过一点调试,我发现我忘了为auth和其他应用创建mysql表(我认为sqllite也是这样)。所以如果你没有,你需要运行python管理.py或者用其他方法创建它们

相关问题 更多 >