Python 如何使flask route可供苗条型而非最终用户使用
我有一个flask服务器,它有类似于route的API-Python 如何使flask route可供苗条型而非最终用户使用,python,flask,google-cloud-firestore,svelte,Python,Flask,Google Cloud Firestore,Svelte,我有一个flask服务器,它有类似于route的API-@app.route(“/API/v1.0/name/”,方法=[“GET”]) 这就去查询我在GCP中设置的firestore数据库。 我已将前端设置为苗条。它仍然不多,只是一个输入名称的字段,以及一个在我的数据库中搜索它的按钮 当运行我的webapp时(我首先运行python.\server.py,然后运行npm run dev,这允许我查看我的网页并与之交互。一切正常 我的问题是,我不希望来自internet的用户能够直接发送查询:
@app.route(“/API/v1.0/name/”,方法=[“GET”])
这就去查询我在GCP中设置的firestore数据库。
我已将前端设置为苗条。它仍然不多,只是一个输入名称的字段,以及一个在我的数据库中搜索它的按钮
当运行我的webapp时(我首先运行python.\server.py
,然后运行npm run dev
,这允许我查看我的网页并与之交互。一切正常
我的问题是,我不希望来自internet的用户能够直接发送查询:
www.mywebsite.com/api/v1.0/name/alice
这是一种有效的路由,我可以通过这种方式直接查询数据库
以下是我在flask服务器中拥有的三条路由:
def index():
return send_from_directory("../client/public", "index.html")
@app.route("/<path:path>")
def home(path):
return send_from_directory("../client/public", path)
@app.route("/api/v1.0/name/<string:name>", methods=["GET"])
def get_by_name(name):
"""
retrieve by name value
"""
docs = db.collection(collection_name.where("name", "==", f"{name}").stream()
return_string = ""
for doc in docs:
if doc:
return_string += f"{doc.info}"
if not return_string:
return "No such name"
return return_string
def index():
从目录(“../client/public”,“index.html”)返回send\u
@附件路线(“/”)
def home(路径):
从_目录(“../client/public”,路径)返回发送_
@app.route(“/api/v1.0/name/”,方法=[“GET”])
def按名称获取(名称):
"""
按名称值检索
"""
docs=db.collection(collection_name.where(“name”),“==”,f“{name}”).stream()
return_string=“”
对于文档中的文档:
如果文件:
return_string+=f“{doc.info}”
如果不返回\u字符串:
返回“无此名称”
返回字符串
这是我的svelte.app文件:
<script>
export let db_result;
let name_query = "";
function getNameFromDB() {
fetch("/api/v1.0/name/" + name_query)
.then(d => d.text())
.then(d => (db_result = d));
}
</script>
<input bind:value={name_query}>
<button on:click={getNameFromDB}>show this name info</button>
{#if db_result}
<p>"name info: " {db_result}</p>
{/if}
导出let db_结果;
让name_query=“”;
函数getNameFromDB(){
fetch(“/api/v1.0/name/”+name\u查询)
.然后(d=>d.text())
.然后(d=>(db_result=d));
}
显示此名称信息
{#如果db#U结果}
名称信息:{db_result}
{/if}
我不确定此解决方案应该在flask服务器中的何处?在svelte应用程序中?如果可能的话,可以在firestore中设置规则?您需要向firestore数据库添加身份验证。您可以在此处查看相关文档: 相关文件副本如下: 对于身份验证,云Firestore REST API接受Firebase身份验证ID令牌或Google Identity OAuth 2.0令牌。您提供的令牌会影响您请求的授权:
- 使用Firebase ID令牌对来自应用程序用户的请求进行身份验证。对于这些请求,云Firestore使用云Firestore安全规则来确定请求是否得到授权
- 使用Google Identity OAuth 2.0令牌和服务帐户来验证来自应用程序的请求,例如数据库管理请求。对于这些请求,Cloud Firestore使用云标识和访问管理(IAM)来确定请求是否得到授权
祝你好运!像其他人一样使用某种身份验证。。。