Aller au contenu
XID

@xid-kit/astro

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

Statut

XID ne publie aucun paquet sur un registre. Ce SDK est distribué sous forme de code source dans le dépôt XID ; utilisez-le depuis une copie locale du dépôt.

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 un middleware serveur avec addMiddleware à l’ordre pre, conserve le matériel de vérification côté serveur et n’expose que la configuration sérialisable du mode navigateur requise par les islands client.

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

const jwtKeyJson = process.env.XID_JWKS_PUBLIC_KEY
if (!jwtKeyJson) throw new Error('Missing XID_JWKS_PUBLIC_KEY')

export default defineConfig({
  output: 'server',
  adapter: node({ mode: 'standalone' }),
  integrations: [
    xidIntegration({
      // This combined SSR setup requires Core routes on the application's exact origin.
      browser: { mode: 'same-origin' },
      jwtKey: JSON.parse(jwtKeyJson),
      issuer: 'https://app.example.com',
      sessionTokenExchange: { endpoint: '/v1/sessions/token' },
      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: JSON.parse(import.meta.env.XID_JWKS_PUBLIC_KEY),
    issuer: 'https://xid.dev',
    sessionTokenExchange: { endpoint: '/v1/sessions/token' },
    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 () => {
    const result = await client.signOut()
    if (!result.ok) throw new Error(result.error.message)
    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.

import '@xid-kit/astro/locals'

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.
  • Transmet les cookies opaques Core uniquement à un endpoint session-token de la même origine exacte ; la valeur n’est jamais vérifiée localement

Saisissez votre recherche

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