У меня есть сайт с Flask на сервере с Apache24 и Python3.6.Мне нужно получить имя пользователя машины Windows, которая входит на сайт.
Я прочитал несколько сайтов и ответов, но у меня это не работает.Я использую mod_wsgi, и я включил «WSGIPassAuthorization On», после этого я попытался получить переменную REMOTE_USER, но она не работает.Также я поместил некоторый код в web.wsgi, чтобы увидеть все переменные, которые прислал мне Apache, там я не вижу ни имени пользователя.
#Apache httpd.conf configuration for the site
LoadFile "d:/Anaconda3/python36.dll"
LoadModule wsgi_module "d:/anaconda3/lib/site-packages/mod_wsgi-4.6.4-py3.6-win-amd64.egg/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "d:/anaconda3"
WSGIPassAuthorization On
WSGIScriptAlias / "D:/wwwApache/visor/web.wsgi"
#WSGIRestrictStdout Off
#WSGIScriptReloading On
#WSGIApplicationGroup %{GLOBAL}
<Directory "D:/wwwApache/visor">
Require all granted
</Directory>
#app.py file piece of code.
from flask import request
@app.route('/')
def index():
#Create file that it's going to contain the environ variables
f= open("variables.txt","w+")
for header in request.headers.items():
f.write(str(header)+"\n")
#Check if REMOTE_USER exists.
f.write(str(request.environ.get('REMOTE_USER')))
f.close()
return render_template('index.html')
#web.wsgi File
import sys
import pprint
sys.path.insert(0, 'D:/site/')
from app import app as application
#This is to get the environment variables, also REMOTE_USERs.
#When it get the variables, it will send the result to error logs of Apache.
class RemoteUserMiddleware(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
user = environ.pop('HTTP_X_PROXY_REMOTE_USER', None)
environ['REMOTE_USER'] = user
return self.app(environ, start_response)
class LoggingMiddleware:
def __init__(self, application):
self.__application = application
def __call__(self, environ, start_response):
errors = environ['wsgi.errors']
pprint.pprint(('REQUEST', environ), stream=errors)
def _start_response(status, headers, *args):
pprint.pprint(('RESPONSE', status, headers), stream=errors)
return start_response(status, headers, *args)
return self.__application(environ, _start_response)
application = LoggingMiddleware(application)
Я до сих пор не мог получить пользователя, я 'Я читал, что можно установить IIS, но я пока не хочу этого делать.Спасибо!