我正在Apache服务器上使用Flask开发一个网页,其中服务器正在执行基本身份验证.也就是说,访问服务器上的页面的用户通过Apache呈现登录屏幕,并且在将请求传递到我的页面之前检查登录凭证.
问题是我是否以及如何从我的flask/python代码访问用户名.当在同一台服务器上使用PHP而不是flask/python时,它很简单:用户名可用作$ _SERVER变量(可用两次,作为键PHP_AUTH_USER的值,也是AUTHENTICATE_CN).我猜/希望Apache会同样使得经过验证的用户名可用于烧瓶(可能通过WSGI以某种方式),但我找不到它.
我已经尝试在request.headers中显示所有键/值对,但用户名不存在.我还应该看看其他地方吗?
Mic*_*oka 16
您可以从request对象中找到Flask中的身份验证信息.
from flask import request
def my_view():
auth = request.authentication
username = auth.username
password = auth.password
...
Run Code Online (Sandbox Code Playgroud)
但请注意,如果您使用的是apache mod_wsgi,则需要WSGIPassAuthorization在virtualhost配置中打开该指令.否则,apache将使用身份验证标头,并且不会将其传递给WSGI层.
<virtualhost *:443>
...
WSGIPassAuthorization On
...
</virtualhost>
Run Code Online (Sandbox Code Playgroud)
我最终找到了它,它可用作:
request.environ.get('REMOTE_USER')
Run Code Online (Sandbox Code Playgroud)
不知道这不是我唯一的问题,如果它对任何人都有用,这就是故事:
首先,我试图找出WSGI是否将身份验证信息传递给了flask.这个对不同问题的回答非常有用(它向您展示了如何看到WSGI在它到达瓶子之前提供的所有内容):
当我按照该答案列出WSGI信息时,它没有用户信息.但结果是因为在相关的网站启用的apache配置文件中为文档根目录(htdocs文件夹)配置了apache基本身份验证的设置.由于我使用WSGI将相关请求重定向到文档路径之外的文件夹,因此我实际上没有为我的页面启用身份验证.(而且我没有注意到,因为我在htdocs下访问了一些页面,被迫进行身份验证,并且当我进入我的刻录页面时,我认为没有被要求进行身份验证,因为身份验证已被缓存).在相关的apache站点启用文件中创建另一部分,为我的flask目录设置身份验证启用身份验证
| 归档时间: |
|
| 查看次数: |
6509 次 |
| 最近记录: |