我使用django和apache构建了网站。我有apache ldap身份验证。用户在对网站进行身份验证后如何获取用户名?我想获取用户名并代表它。
答案 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_USER
:https://docs.djangoproject.com/en/1.9/howto/auth-remote-user/
编辑:如果您对使用Apache执行身份验证没有任何要求,您可能希望直接在Django应用中执行身份验证,请参阅:https://pythonhosted.org/django-auth-ldap/和示例https://djangosnippets.org/snippets/901/。