Фауна, возвращающая «несанкционированный» при использовании Auth0 в качестве стороннего поставщика доступа

#vuejs3 #auth0 #faunadb

Вопрос:

Я пытаюсь интегрировать Fauna и Auth0 в свое приложение Vue 3.

Чтобы добиться этого, я следую этому руководству Auth0 и этому видео на YouTube.

Короче говоря, я настроил Auth0 в качестве поставщика внутри Фауны. И я отправляю сгенерированный Auth0 токен JWT в качестве секрета фауны. Затем Фауна должна расшифровать JWT и предоставить доступ к вызову.

Чтобы проверить это, мой код извлекает некоторые фиктивные данные «продуктов» из Фауны и выводит их на консоль.

Но когда я звоню, он возвращается как unauthorized .

Что я делаю не так?

Вот сценарий внутри моего компонента Vue, который выполняет вызов:

 import { defineComponent, inject } from "vue";
import { query as q, Client } from "faunadb";

export default defineComponent({
  name: "Api",
  setup() {
    let apiMessage = null;
    let executed = false;
    const auth = inject("Auth");

    const callApi = async () => {
      const accessToken = await auth.getTokenSilently();
      console.log(accessToken);
      try {
        const client = new Client({ secret: accessToken });
        const { Paginate, Documents, Collection } = q;

        const data = await client.query(
          Paginate(Documents(Collection("products")))
        );

        console.log(data);
        apiMessage = data;
        executed = true;
      } catch (e) {
        console.log(e);
        apiMessage = `Error: the server responded with '${e.response.status}: ${e.response.statusText}'`;
      }
    };

    return {
      callApi,
    };

  },
});
 

Вот копия unauthorized возвращаемого объекта ответа:

 {
  "name": "Unauthorized",
  "message": "unauthorized",
  "description": "Unauthorized",
  "requestResult": {
    "method": "POST",
    "path": "",
    "query": null,
    "requestRaw": "{"paginate":{"documents":{"collection":"products"}}}",
    "requestContent": {
      "raw": {
        "paginate": {
          "raw": {
            "documents": {
              "raw": {
                "collection": "products"
              }
            }
          }
        }
      }
    },
    "responseRaw": "{"errors":[{"code":"unauthorized","description":"Unauthorized"}]}",
    "responseContent": {
      "errors": [
        {
          "code": "unauthorized",
          "description": "Unauthorized"
        }
      ]
    },
    "statusCode": 401,
    "responseHeaders": {
      "content-length": "65",
      "content-type": "application/json;charset=utf-8",
      "x-txn-time": "1634006015704445"
    },
    "startTime": 1634006014934,
    "endTime": 1634006015885
  }
}
 

Ответ №1:

Понял это.

Клиент должен быть инициирован с некоторыми другими значениями, самое главное-это domain значение.

 var client = new faunadb.Client({
  secret: 'YOUR_FAUNA_SECRET',
  domain: 'db.fauna.com',
  // NOTE: Use the correct domain for your database's Region Group.
  port: 443,
  scheme: 'https',
})