验证后如何获取用户名? (阿帕奇)

时间:2016-02-01 11:40:58

标签: django apache authentication web ldap

我使用django和apache构建了网站。我有apache ldap身份验证。用户在对网站进行身份验证后如何获取用户名?我想获取用户名并代表它。

1 个答案:

答案 0 :(得分:1)

因此您正在使用Apache LDAP身份验证。如果您使用mod_auth_ldap,请参阅此处的文档http://httpd.apache.org/docs/2.0/mod/mod_auth_ldap.html#frontpage。如果你使用  mod_authnz_ldap在此处查看文档https://httpd.apache.org/docs/2.4/mod/mod_authnz_ldap.html#exposed

文档告诉我们,当用户通过身份验证时,Apache会设置环境变量,可以从CGI脚本访问。变量名称因您使用的版本而异。虽然Python使用WSGI,但你仍然应该尝试将变量作为它的环境变量,并且无论如何都应该可以访问。

在python中访问环境变量:

import os
username=os.getenv["REMOTE_USER"] #will return variable value or None
if username:
    pass
    #process username here

请在此处查看有关此功能的文档:https://docs.python.org/3.5/library/os.html#os.getenv

您可以尝试在您期望用户名的Python代码中直接使用它。或者更好地在Django项目的wsgi.py中使用此代码,如果username可用,则添加带有其值的特殊标头,以便在传递给Django视图的request中的Django中可用。但请记住在添加之前删除该标题,因此如果恶意用户伪造标题,则不会影响您的应用。有关详细信息,请参阅https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/apache-auth/

编辑:顺便说一下,有一个"操作方法"对于REMOTE_USERhttps://docs.djangoproject.com/en/1.9/howto/auth-remote-user/

编辑:如果您对使用Apache执行身份验证没有任何要求,您可能希望直接在Django应用中执行身份验证,请参阅:https://pythonhosted.org/django-auth-ldap/和示例https://djangosnippets.org/snippets/901/