Ir para o conteúdo

@xid-kit/astro

Integração Astro com middleware SSR, auxiliares de servidor esingleton do cliente island para sites Astro estáticos e renderizadosno servidor.

Ver como Markdown

Estado

Status do registry: UNPUBLISHED. Instale este SDK somente a partir do checkout do código-fonte do repositório; não use um registry de pacotes externo.

O status do pacote é Pacote atual. A integração Astro,middleware SSR, auxiliares de servidor e singleton do cliente islandestão implementados. Uma ida e volta real com o IdP em infraestruturade produção ainda está pendente de verificação manual.

Configuração da integração

Registre xidIntegration em astro.config.mjs. A integração injeta middleware de servidor com addMiddleware na ordem pre, mantém o material de verificação no servidor e expõe apenas a configuração serializável do modo de navegador exigida pelos islands do cliente.

// 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 manual (alternativa)

// 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',
  }),
)

Autenticação no lado do servidor em páginas .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 do cliente

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

Tipagem de Astro.locals

Adicione a referência de tipo a src/env.d.ts para obtercobertura de tipo completa em Astro.locals.xidAuth.

import '@xid-kit/astro/locals'

API exportada

Exportar Tipo Módulo
xidIntegration Factory de integração Astro @xid-kit/astro
createXidMiddleware factory de middleware @xid-kit/astro
getAuth, currentUser, xidClient auxiliares de servidor @xid-kit/astro/server
getClient, initClient, resetClient singleton do cliente island @xid-kit/astro/client

Notas de segurança

  • jwtKey é uma chave pública JWKS; é segura para verificação semrede e não contém chave privada.
  • secretKey (sk_live_xxx) deve permanecer exclusivamenteno lado do servidor; nunca passe para um island ou bundle do cliente.
  • Rotas protegidas redirecionam via Response.redirect nomiddleware antes de qualquer handler de página ser executado; nenhumJS no lado do cliente é necessário.
  • Encaminha cookies opacos do Core somente a um endpoint session-token da mesma origem exata; o valor nunca é verificado localmente
Navegação

Digite para pesquisar...

Use as teclas de seta para navegarPressione Enter para selecionarPressione Escape para fechar