Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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
Python 如何使flask route可供苗条型而非最终用户使用_Python_Flask_Google Cloud Firestore_Svelte - Fatal编程技术网

Python 如何使flask route可供苗条型而非最终用户使用

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的用户能够直接发送查询:

我有一个flask服务器,它有类似于route的API-
@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)来确定请求是否得到授权


祝你好运!

像其他人一样使用某种身份验证。。。