Я не могу получить имя пользователя Windows-машины с Flask, Apache и mod_wsgi - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть сайт с 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, но я пока не хочу этого делать.Спасибо!

...