2016-02-01 4 views
-1

Я построил сайт, используя django и apache. У меня есть аутентификация apache ldap. Как получить имя пользователя после аутентификации пользователя на веб-сайте? Я хочу получить имя пользователя и представить его.Как получить имя пользователя после аутентификации? (apache)

+1

Добро пожаловать на stackoverflow! Когда вы задаете вопрос, вы должны указать основной код, связанный с тем вопросом, который вы пробовали до сих пор. – doru

+0

Я ничего не пробовал, я не знаю, как это сделать – ron

+0

Вы используете [django-auth-ldap] (https://pythonhosted.org/django-auth-ldap/users.html)? – doru

ответ

1

Итак, вы используете аутентификацию Apache LDAP. Если вы используете mod_auth_ldap, см. Документы здесь http://httpd.apache.org/docs/2.0/mod/mod_auth_ldap.html#frontpage. Если вы используете, смотрите документы здесь https://httpd.apache.org/docs/2.4/mod/mod_authnz_ldap.html#exposed.

Что говорят документы, когда пользователь аутентифицирован, Apache устанавливает переменную среды, к которой можно получить доступ из сценария CGI. Имя переменной зависит от версии, которую вы используете. Хотя Python использует WSGI, вы все равно должны пытаться получить переменную как переменную среды и должны быть доступны в любом случае.

В питоне, чтобы получить доступ к переменной окружения:

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, где вы ожидаете имя пользователя. Или лучше использовать этот код в wsgi.py в вашем проекте Django, и если доступно 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/.

Edit: Кстати, есть «Как-к» для REMOTE_USER: https://docs.djangoproject.com/en/1.9/howto/auth-remote-user/

Edit: Если у вас нет каких-либо требований для выполнения аутентификации с Apache, вы можете выполнить проверку подлинности в Django приложения непосредственно, см.: https://pythonhosted.org/django-auth-ldap/ и в примере https://djangosnippets.org/snippets/901/.

+0

Я проверил переменные среды (расширенные системные настройки > переменные окружения> и я не видел удаленной пользовательской переменной – ron

+0

Это не глобальная переменная среды. Она устанавливается Apache внутри процесса после того, как конкретный пользователь получает аутентификацию и, следовательно, доступен только в этом процессе и его дочерних процессах. он доступен вам, возможно, вам придется изменить некоторые настройки Apache, см. ссылки, которые я предоставил для получения дополнительной информации. – Nikita

+0

Спасибо большое за успех! – ron

Смежные вопросы