Aller au contenu

@xid-kit/astro

Intégration Astro avec middleware SSR, assistants serveur et singletonclient island pour les sites Astro statiques et rendus côté serveur.

Afficher en Markdown

Statut

Le statut du package est Package actuel. L’intégration Astro, lemiddleware SSR, les assistants serveur et le singleton client island sontimplémentés. Un aller-retour réel avec un IdP sur une infrastructure deproduction est en attente de vérification manuelle.

Configuration de l’intégration

Enregistrez xidIntegration dans astro.config.mjs.L’intégration injecte le middleware d’authentification viaaddMiddleware à l’ordre pre et fournit la clé publiable auxislands client.

// astro.config.mjs
import { defineConfig } from 'astro/config'
import { xidIntegration } from '@xid-kit/astro'
import node from '@astrojs/node'

export default defineConfig({
  output: 'server',
  adapter: node({ mode: 'standalone' }),
  integrations: [
    xidIntegration({
      publishableKey: import.meta.env.PUBLIC_XID_PK,
      jwtKey: import.meta.env.XID_JWT_KEY,
      protectedRoutes: ['/dashboard', '/account'],
      signInUrl: '/sign-in',
    }),
  ],
})

Middleware manuel (alternative)

// src/middleware.ts
import { sequence } from 'astro:middleware'
import { createXidMiddleware } from '@xid-kit/astro'

export const onRequest = sequence(
  createXidMiddleware({
    jwtKey: import.meta.env.XID_JWT_KEY,
    issuer: 'https://xid.dev',
    protectedRoutes: ['/dashboard', '/account'],
    signInUrl: '/sign-in',
  }),
)

Authentification côté serveur dans les pages .astro

---
// src/pages/dashboard.astro
import { getAuth, currentUser } from '@xid-kit/astro/server'

const auth = getAuth(Astro.locals)
if (!auth.userId) return Astro.redirect('/sign-in')

const user = await currentUser(Astro.locals, {
  secretKey: import.meta.env.XID_SECRET_KEY,
})
---

<h1>Welcome, {user?.primaryEmailAddress}</h1>

Island client

// src/components/SignOutButton.tsx
import { getClient } from '@xid-kit/astro/client'

export default function SignOutButton() {
  const client = getClient()

  const handleSignOut = async () => {
    await client.signOut()
    window.location.href = '/'
  }

  return <button onClick={handleSignOut}>Sign out</button>
}

Typage de Astro.locals

Ajoutez la référence de type dans src/env.d.ts pour obtenir unecouverture de type complète sur Astro.locals.xidAuth.

/// <reference path="../node_modules/@xid-kit/astro/src/locals.d.ts" />

API exportée

Exporter Type Module
xidIntegration Fabrique d’intégration Astro @xid-kit/astro
createXidMiddleware fabrique de middleware @xid-kit/astro
getAuth, currentUser, xidClient assistants serveur @xid-kit/astro/server
getClient, initClient, resetClient singleton client island @xid-kit/astro/client

Notes de sécurité

  • jwtKey est une clé publique JWKS ; elle est sûre pour lavérification sans réseau et ne contient pas de clé privée.
  • secretKey (sk_live_xxx) doit rester côté serveur uniquement; ne le transmettez jamais à un island ou un bundle client.
  • Les routes protégées redirigent via Response.redirect dans lemiddleware avant l’exécution de tout gestionnaire de page ; aucun JS côtéclient n’est requis.
  • Ré-exporte @xid-kit/backend authenticateRequest pour lechemin de vérification JWT sans réseau.
Navigation

Saisissez votre recherche...

Utilisez les touches fléchées pour naviguerAppuyez sur Entrée pour sélectionnerAppuyez sur Échap pour fermer