как сделать маршрут flask доступным для svelte, а не для конечного пользователя - PullRequest
0 голосов
/ 11 января 2020

У меня есть flask сервер, который имеет API, подобный маршруту - @app.route("/api/v1.0/name/<string:name>", methods=["GET"])

this go и запрашивает базу данных пожарного хранилища, которую я настроил в GCP. Я настроил свой интерфейс, чтобы быть в стройном. это все еще немного, просто поле для ввода имени и кнопка для его поиска в моей базе данных.

при запуске моего веб-приложения (сначала я запускаю python .\server.py, затем запускаю npm run dev, что позволяет мне см. мою веб-страницу и взаимодействуйте с ней. все работает правильно.

моя проблема в том, что я не хочу, чтобы пользователи из inte rnet могли отправлять запрос напрямую: 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

и это мой svelte .app file:

<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}

Я не уверен, где должно быть это решение, на сервере flask в приложении svelte? Может быть, установить правило в firestore, если это возможно?

1 Ответ

0 голосов
/ 04 марта 2020

Вам необходимо добавить аутентификацию в вашу БД пожарного депо. Вы можете увидеть документы для этого здесь: https://firebase.google.com/docs/firestore/use-rest-api#authentication_and_authorization

Соответствующее скопировано ниже:

Для аутентификации API REST Cloud Firestore принимает либо Токен идентификатора аутентификации Firebase или токен Google Identity OAuth 2.0. Предоставленный вами токен влияет на авторизацию вашего запроса:

  • Используйте токены Firebase ID для аутентификации запросов от пользователей вашего приложения. Для этих запросов Cloud Firestore использует правила безопасности Cloud Firestore, чтобы определить, авторизован ли запрос.

  • Используйте токен Google Identity OAuth 2.0 и учетную запись службы для аутентификации запросов от вашего приложения, например как запросы на администрирование базы данных. Для этих запросов Cloud Firestore использует Cloud Identity and Access Management (IAM), чтобы определить, авторизован ли запрос.

Удачи!

...