Estado
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. Aintegração injeta o middleware de autenticação viaaddMiddleware na ordem pre e fornece a chave publicávelpara os islands de cliente.
// 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 manual (alternativa)
// 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',
}),
)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 () => {
await client.signOut()
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.
/// <reference path="../node_modules/@xid-kit/astro/src/locals.d.ts" />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.redirectnomiddleware antes de qualquer handler de página ser executado; nenhumJS no lado do cliente é necessário. - Faz re-export de @xid-kit/backend
authenticateRequestpara o caminho de verificação JWT sem rede.