SDK de React (@auris/react)
@auris/react v0.1.0@auris/react proporciona bindings de React para Auris IAM. Envuelve @auris/js con un proveedor de contexto, hooks para acceder al estado de autenticación, comprobaciones de permisos, consultas FGA y contexto de organización — además de componentes UI preconstruidos para patrones comunes.
Instalación
npm install @auris/react @auris/jsAmbos paquetes son necesarios. @auris/react depende de @auris/js como peer dependency.
AurisProvider
Envuelve la raíz de tu aplicación (o el subárbol que necesita autenticación) con AurisProvider. Inicializa AurisClient, restaura cualquier sesión existente desde el almacenamiento y proporciona el contexto de Auris a todos los componentes hijos.
import { AurisProvider } from '@auris/react'
function App() {
return (
<AurisProvider
domain="auth.tudominio.com"
clientId="app_xxxxx"
redirectUri="http://localhost:3000/callback"
tenant="mi-tenant"
storage="localStorage"
autoRefresh={true}
>
<TuApp />
</AurisProvider>
)
}En una aplicación Next.js, importa AurisProvider desde @auris/nextjs en lugar de @auris/react. El paquete Next.js re-exporta todos los componentes y hooks de React.
Hooks
useAuris()
El hook principal. Devuelve el contexto de autenticación completo: usuario actual, estado de carga, métodos de autenticación e información de errores.
import { useAuris } from '@auris/react'
function Dashboard() {
const { user, isLoading, isAuthenticated, loginWithRedirect, logout } = useAuris()
if (isLoading) return <div>Cargando...</div>
if (!isAuthenticated) return <button onClick={() => loginWithRedirect()}>Iniciar sesión</button>
return <div>Bienvenido, {user?.name}!</div>
}useUser()
Acceso directo a la información del usuario. Devuelve null si no hay sesión.
const user = useUser()
// { id, email, name, roles, picture, ... }usePermissions()
Comprueba permisos RBAC para el usuario actual.
const { hasPermission, isLoading } = usePermissions()
const canEdit = await hasPermission('documents:write')useFga()
Comprueba relaciones de autorización de grano fino.
const { check } = useFga()
const { allowed } = await check({
user: `user:${user.id}`,
relation: 'editor',
object: `document:${docId}`,
})useOrganization()
Accede al contexto de la organización actual del usuario.
const { organization, members, switchOrganization } = useOrganization()Componentes
AuthGuard
Envuelve el contenido que requiere autenticación. Redirige a inicio de sesión si el usuario no está autenticado.
import { AuthGuard } from '@auris/react'
function ProtectedPage() {
return (
<AuthGuard redirectTo="/login">
<Dashboard />
</AuthGuard>
)
}PermissionGate
Renderiza hijos condicionalmente basándose en permisos RBAC.
import { PermissionGate } from '@auris/react'
function AdminPanel() {
return (
<PermissionGate permission="admin:access" fallback={<div>Acceso denegado</div>}>
<AdminContent />
</PermissionGate>
)
}FgaGate
Renderiza hijos condicionalmente basándose en relaciones FGA.
import { FgaGate } from '@auris/react'
function DocumentEditor({ docId }: { docId: string }) {
return (
<FgaGate
user={`user:${userId}`}
relation="editor"
object={`document:${docId}`}
fallback={<ReadOnlyView />}
>
<EditableView />
</FgaGate>
)
}Gestión de callbacks
Gestiona la redirección de vuelta desde la página de login de Auris:
// pages/callback.tsx o app/auth/callback/page.tsx
'use client'
import { useEffect } from 'react'
import { useAuris } from '@auris/react'
import { useRouter } from 'next/navigation'
export default function CallbackPage() {
const { handleRedirectCallback } = useAuris()
const router = useRouter()
useEffect(() => {
handleRedirectCallback().then(({ appState }) => {
router.replace(appState?.returnTo ?? '/dashboard')
})
}, [])
return <div>Completando el inicio de sesión...</div>
}