Rumah > hujung hadapan web > tutorial js > Umbraco dan Bellissima: Kesombongan, Token, Mata Masuk

Umbraco dan Bellissima: Kesombongan, Token, Mata Masuk

Patricia Arquette
Lepaskan: 2024-12-23 04:37:24
asal
989 orang telah melayarinya

Umbraco and Bellissima: Swagger, Tokens, Entry Points

Contoh berikut diuji dalam Umbraco 14 dan 15 dan saya telah menulisnya di sini kebanyakannya untuk dapat mencari dengan cepat cara menjana klien TypeScript dan mendapatkan access_token daripada Umbraco.

Pengesahan asas

Pada dasarnya, kami mahu meletakkan pengepala Kebenaran dalam panggilan fetch():

fetch('/myapi/controller/endpoint', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 123' // <-- Token goes here
  }
});
Salin selepas log masuk

Ini boleh dibungkus dalam Umbraco menggunakan API Konteks:

/**
 * Make an authorized request to any Backoffice API.
 * @param host A reference to the host element that can request a context.
 * @param url The URL to request.
 * @param method The HTTP method to use.
 * @param body The body to send with the request (if any).
 * @returns The response from the request as JSON.
 */
async function makeRequest(host: UmbClassInterface, url: string, method = 'GET', body?: any) {
  const authContext = await host.getContext(UMB_AUTH_CONTEXT);
  const token = await authContext.getLatestToken();
  const response = await fetch(url, {
    method,
    body: body ? JSON.stringify(body) : undefined,
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`,
    },
  });
  return response.json();
}
Salin selepas log masuk

Namun, jangan lakukan ini. Gunakan penjana klien TypeScript sebaliknya:

Klien TypeScript

Saya sentiasa menggunakan versi terkini @hey-api/openapi-ts untuk menjana klien TypeScript. Pustaka ini menyokong beberapa pelanggan, dan saya cuba menaik taraf kepada @hey-api/client-fetch mereka sendiri, tetapi ia juga mempunyai pengambilan asli. Berikut ialah cara untuk menyambung kepada pengesahan Umbraco untuk kedua-dua pelanggan.

Mula-mula, pasang @hey-api/openapi-ts:

npm i --save @hey-api/openapi-ts @hey-api/client-fetch
Salin selepas log masuk

Kemudian buat skrip dalam package.json:

{
  "scripts": {
    "generate": "openapi-ts -i http://localhost:7029/umbraco/swagger/bellissima-v1/swagger.json?urls.primaryName=Bellissima%20Management%20Api -o src/api -c @hey-api/client-fetch"
  }
}
Salin selepas log masuk

Seterusnya, buat /App_Plugins/MyExtensions/umbraco-package.json dan daftarkan sambungan jenis backofficeEntryPoint:

{
  "name": "My Extensions",
  "alias": "My.Extensions",
  "version": "1.0.0",
  "extensions": [
    {
      "type": "backofficeEntryPoint",
      "alias": "My.Entrypoint",
      "name": "My Entrypoint",
      "js": "/App_Plugins/MyExtensions/entry-point.js"
    }
  ]
}
Salin selepas log masuk

Pastikan anda menyediakan transpiler TypeScript (tsc, vite, dll) dan buat fail entry-point.ts.

@hey-api/client-fetch

Tambah yang berikut pada entry-point.ts:

import type { UmbEntryPointOnInit } from '@umbraco-cms/backoffice/extension-api';
import { UMB_AUTH_CONTEXT } from '@umbraco-cms/backoffice/auth';
import { client } from './api/index.js';

export const onInit: UmbEntryPointOnInit = (host) => {
  host.consumeContext(UMB_AUTH_CONTEXT, (authContext) => {

    // Get API config
    const config = authContext.getOpenApiConfiguration();

    // Set base config
    client.setConfig({
      baseUrl: config.base,
      credentials: config.credentials
    });

    // Set interceptor to add authorization
    client.interceptors.request.use(async (req) => {
      const token = await config.token();
      if (token) {
        req.headers.set('Authorization', `Bearer ${token}`);
      }
      return req;
    });
  });
};
Salin selepas log masuk

warisan / ambil

Nota: Pelanggan ini ditamatkan penggunaannya. Untuk menggunakannya, gantikan @hey-api/client-fetch dengan legasi/fetch dalam skrip jana.

Tambah yang berikut pada entry-point.ts:

import type { UmbEntryPointOnInit } from '@umbraco-cms/backoffice/extension-api';
import { UMB_AUTH_CONTEXT } from '@umbraco-cms/backoffice/auth';
import { OpenAPI } from './api/index.js';

export const onInit: UmbEntryPointOnInit = (host) => {
  host.consumeContext(UMB_AUTH_CONTEXT, (authContext) => {

    // Get API config
    const config = authContext.getOpenApiConfiguration();

    // Set base config
    OpenAPI.BASE = config.base;
    OpenAPI.TOKEN = config.token;
    OpenAPI.CREDENTIALS = config.credentials;
    OpenAPI.WITH_CREDENTIALS = config.withCredentials;
    OpenAPI.ENCODE_PATH = config.encodePath;
  });
};
Salin selepas log masuk

Titik masuk memastikan kebenaran disediakan sebelum sebarang permintaan dibuat dalam Backoffice, dan kini anda boleh mengimport SDK yang dijana dan memanggilnya daripada mana-mana elemen dengan atau tanpa fungsi tryExecute dan tryExecuteAndNotify.

Atas ialah kandungan terperinci Umbraco dan Bellissima: Kesombongan, Token, Mata Masuk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan