【发布时间】:2021-11-07 12:38:09
【问题描述】:
背景:
我知道这是一个非常基本的问题,但我没有前端应用程序的经验。我最近尝试将GET 请求从静态 HTML 页面发送到在云服务器上的 Docker 中运行的应用程序,但它没有工作。所以现在我正在尝试一个进行身份验证的 Flask 应用,而不是 HTML 页面。
我想做的事:
创建一个索引页面,如果用户登录,他们会看到一些产品。如果用户未登录,他们会看到一个登录表单以输入他们的电子邮件 ID 和密码。
Flask 应用程序将部署在 Docker 中,并可通过 Kubernetes Ingress 在 Kubernetes 云集群上使用。 我主要担心的是用户名和密码如何从客户端浏览器找到正确的服务。它是通过在 HTML 页面本身生成的POST 完成的吗? POST 请求不是必须指向某个特定的URL 吗?单击Login 按钮时,是否应该通过某些JQuery 脚本对密码进行哈希处理?
我无法弄清楚:
即使在看到lot of examples 之后,当用户键入他们的电子邮件和密码并单击“登录”按钮时,我也无法找出正确的方法来散列并向 Flash 应用程序发送密码。然后,如果用户已登录,它必须呈现一个显示产品的 HTML 页面。
如果有一种无需flask-httpauth(使用pip install flask-httpauth 安装)的简单方法,或者如果有一个语法更简洁的库,那么也欢迎使用该技术。
烧瓶代码:
#!flask/bin/python
from flask import Flask, jsonify, abort, request, make_response, url_for
from flask_httpauth import HTTPBasicAuth
app = Flask(__name__, static_url_path = "")
auth = HTTPBasicAuth()
@app.route('/')
@auth.login_required
def welcome():
return render_template('index.html')
@app.route('/logout')
def welcome():
return render_template('logout.html')
@auth.error_handler
def unauthorized():
return '<!DOCTYPE html><html><body><div style="text-align: center;">Unauthorized access</div></body></html>'
@app.errorhandler(400)
def not_found(error):
return '<!DOCTYPE html><html><body><div style="text-align: center;">Bad request</div></body></html>'
@app.errorhandler(404)
def not_found(error):
return '<!DOCTYPE html><html><body><div style="text-align: center;">Page not found</div></body></html>'
if __name__ == '__main__':
app.run(debug=True, host="0.0.0.0")
登录页面:index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Vacation Finder</title>
<!--Import materialize.css-->
<link type="text/css" rel="stylesheet" href="materialize.min.css"/>
<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body>
<div>
<nav>
<div class="nav-wrapper grey darken-4">
<div style="text-align: center; font-size: 30px; font-weight: bold;">Some page</div>
<div class="row">
<div class="col s12 m8 l4 offset-m2 offset-l4">
<br>
<br>
<div class="card">
<div class="card-content">
<div class="row">
<div class="input-field col s12">
<input id="email" type="email" class="validate">
<label for="email">Email</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input id="password" type="password" class="validate">
<label for="password">Password</label>
</div>
</div>
<button id="login" class="waves-effect waves-light btn blue darken-1" style="width:100%;">Login</button>
<br>
</div>
</div>
</div>
</div>
</div>
</nav>
</div>
</body>
</html>
【问题讨论】:
标签: python docker flask kubernetes