Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Flask中访问Apache基本身份验证用户_Apache_Flask - Fatal编程技术网

如何在Flask中访问Apache基本身份验证用户

如何在Flask中访问Apache基本身份验证用户,apache,flask,Apache,Flask,我正在使用Flask在Apache服务器上开发一个web页面,服务器在该服务器上强制执行基本身份验证。也就是说,用户访问服务器上的页面时,Apache会显示一个登录屏幕,并在将请求传递到我的页面之前检查登录凭据 问题是,我是否以及如何从flask/python代码中访问用户名。在同一台服务器上使用PHP而不是flask/python时,很简单:用户名是一个可用的$\服务器变量(看起来可用两次,作为密钥PHP\u AUTH\u USER的值,还可以进行身份验证)。我猜测/希望Apache也能将经过

我正在使用Flask在Apache服务器上开发一个web页面,服务器在该服务器上强制执行基本身份验证。也就是说,用户访问服务器上的页面时,Apache会显示一个登录屏幕,并在将请求传递到我的页面之前检查登录凭据

问题是,我是否以及如何从flask/python代码中访问用户名。在同一台服务器上使用PHP而不是flask/python时,很简单:用户名是一个可用的$\服务器变量(看起来可用两次,作为密钥PHP\u AUTH\u USER的值,还可以进行身份验证)。我猜测/希望Apache也能将经过身份验证的用户名提供给flask(也许是通过WSGI),但我找不到它


我已尝试在request.headers中显示所有键/值对,但用户名不存在。还有其他地方我应该找吗?

我最终找到了它,它的可用性如下:

request.environ.get('REMOTE_USER')
不知道这不是我唯一的问题,但是,以防万一 它对任何人都有用,故事如下:

首先,我试图找出WSGI是否通过了身份验证 信息传送到烧瓶。对另一个问题的回答是非常正确的 有用的(它向您展示了如何查看WSGI以前提供的所有内容) 到了晚上

当我按照这个答案列出WSGI信息时,它没有 用户信息。但事实证明,这是因为 相关站点中的apache基本身份验证启用了apache 已为文档根目录(htdocs文件夹)配置配置文件。 因为我使用WSGI将相关请求重定向到一个文件夹 在文档路径之外,我实际上没有身份验证 为我的页面打开。(我没有注意到这一点,因为我访问了 htdocs下的一些页面被强制进行身份验证,并假定 当我进入我的烧瓶页面时,我没有被要求进行身份验证 因为身份验证已被缓存)。 已启用在相关apache站点中创建另一节
文件为我的flask目录设置身份验证启用了身份验证

您可以从
请求
对象在flask中找到身份验证信息

from flask import request

def my_view():
    auth = request.authentication
    username = auth.username
    password = auth.password
    ...
但是请注意,如果您正在使用apachemod_wsgi,则需要在virtualhost配置中打开
WSGIPassAuthorization
指令。否则apache将使用身份验证头,并且不会将其传递给WSGI层

<virtualhost *:443>
    ...

    WSGIPassAuthorization On

    ...
</virtualhost>

...
WSGIPassAuthorization On
...

更多信息和信息。

这是正确的方法。尽管apache设置是
WSGIPassAuthorization On
(没有等号)。在Python 2和3中都尝试过,但我得到了
AttributeError:“请求”对象没有属性“身份验证”