Django远程用户不存在,但HTTP远程用户存在

Django远程用户不存在,但HTTP远程用户存在,django,httprequest,python-requests,Django,Httprequest,Python Requests,全部, 我有一个很简单的问题。我正在尝试使用远程用户变量使用Django身份验证,请遵循以下说明: 然后,为了测试这是否有效,我使用了postman chrome扩展。在这里,我设置了一个名为“REMOTE-USER”的头变量,然后是超级用户的文本,然后点击django管理页面。我不会自动登录 我在RemoteUserMiddleware类中的process\u request函数中设置了一个断点。当我发出请求时,我看到request.META[“HTTP\u REMOTE\u USER”]存在

全部,

我有一个很简单的问题。我正在尝试使用远程用户变量使用Django身份验证,请遵循以下说明:

然后,为了测试这是否有效,我使用了postman chrome扩展。在这里,我设置了一个名为“REMOTE-USER”的头变量,然后是超级用户的文本,然后点击django管理页面。我不会自动登录

我在
RemoteUserMiddleware
类中的process\u request函数中设置了一个断点。当我发出请求时,我看到
request.META[“HTTP\u REMOTE\u USER”]
存在,但
request.META[“REMOTE\u USER”]
不存在。默认的
RemoteUserMiddleware
变量使用
header=“REMOTE\u USER”
。HTTP头变量似乎有一个HTTP前缀,所以我不明白这是怎么回事


我觉得我肯定错过了一些明显的东西。谢谢

远程用户是由web服务器(如Apache)设置的环境变量,而不是HTTP头。如果它是一个HTTP头,那么用户将能够伪造该头,并以他们想要的任何用户身份登录

所有的http头都有前缀
http_uquot
,以便您可以区分它们和环境变量

您可以使用开发服务器设置环境变量,如下所示

REMOTE_USER=admin ./manage.py runserver

那么,有什么办法来测试这个吗?我可以手动设置环境变量吗?另外,据我所知,是的,用户可以伪造报头,但用例是应用程序位于设置远程用户的服务器后面,并且应用程序只是信任该服务器。使用http报头会有风险,因为服务器会让报头通过,除非进行适当配置。使用环境变量可以防止这种情况,因为用户无法设置环境变量。是的,您可以在使用
runserver
时设置环境变量,请参阅我的更新答案。您可以使用
os.environ
Ah手动设置环境变量!现在这更有意义了。我只是有一个明显的误解。在运行中,一台单独机器上的服务器如何在运行应用程序的单独机器上设置环境变量?@StephenHartzell您不应该从另一台机器上设置环境变量。您可能会在运行测试的任何地方设置它,并且可能只针对您正在运行的特定测试。