我在服务器上的flask应用程序中使用BasicAuth。每当我尝试输入用户名和密码时,应用程序只会再次提示我输入信息,但它不会对我进行身份验证。我不知道如何解决这个问题。我的应用程序中的代码是:
app.config['BASIC_AUTH_USERNAME'] = 'user'
app.config['BASIC_AUTH_PASSWORD'] = 'password'
basic_auth = BasicAuth(app)
@app.route("/secret")
@basic_auth.required
def secret_view():
return submit.html
答案 0 :(得分:1)
我在this AWS论坛上找到了答案。问题在于Elastic Beanstalk配置:您必须配置Apache以将身份验证标头(即用户的明文用户名和密码)传递给您的python应用程序(因此,无论您使用何种解决方案来解析身份验证凭据(在我的情况下为flask_httpauth
)至mod_wsgi
。
为此,请在.config
文件中保存的.ebextensions
文件中设置容器命令。我使用下面的那个。
<强> .ebextensions / auth.config 强>
container_commands:
01_wsgi_pass_headers:
command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
当然,不言而喻,由于这些凭据将以明文形式传递,您必须将应用程序设置为仅通过HTTPS连接进行访问!
答案 1 :(得分:0)
这个简单的例子对我有用:
app.py
from flask import Flask, render_template
from flask.ext.basicauth import BasicAuth
app = Flask(__name__)
app.config['BASIC_AUTH_USERNAME'] = 'user'
app.config['BASIC_AUTH_PASSWORD'] = 'password'
basic_auth = BasicAuth(app)
@app.route("/secret")
@basic_auth.required
def secret_view():
return render_template('secret_page.html')
if __name__ == '__main__':
app.run(debug=True)
模板/ secret_page.html
Secret page!
示例请求:
curl -I http://localhost:5000/secret
HTTP/1.0 401 UNAUTHORIZED
WWW-Authenticate: Basic realm=""
Content-Type: text/html; charset=utf-8
Content-Length: 0
Server: Werkzeug/0.10.4 Python/2.7.8
Date: Wed, 15 Apr 2015 04:42:42 GMT
curl -I -u user:password http://localhost:5000/secret
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 12
Server: Werkzeug/0.10.4 Python/2.7.8
Date: Wed, 15 Apr 2015 04:42:54 GMT
curl -u user:password http://localhost:5000/secret
Secret page!