diff --git a/src/content/docs/es/guides/actions.mdx b/src/content/docs/es/guides/actions.mdx index 3f1809b6b9503..a252d1dd68e8a 100644 --- a/src/content/docs/es/guides/actions.mdx +++ b/src/content/docs/es/guides/actions.mdx @@ -331,14 +331,14 @@ export const server = { // Coincide cuando el campo `type` tiene el valor `create` type: z.literal('create'), name: z.string(), - email: z.string().email(), + email: z.email(), }), z.object({ // Coincide cuando el campo `type` tiene el valor `update` type: z.literal('update'), id: z.number(), name: z.string(), - email: z.string().email(), + email: z.email(), }), ]), async handler(input) { @@ -376,7 +376,7 @@ El siguiente ejemplo muestra un formulario validado para la suscripción a un ne ``` -2. Define una acción `newsletter` para manejar el formulario enviado. Valida el campo `email` usando el validador `z.string().email()`, y la casilla `terms` con `z.boolean()`: +2. Define una acción `newsletter` para manejar el formulario enviado. Valida el campo `email` usando el validador `z.email()`, y la casilla `terms` con `z.boolean()`: ```ts title="src/actions/index.ts" ins={5-12} import { defineAction } from 'astro:actions'; @@ -386,7 +386,7 @@ El siguiente ejemplo muestra un formulario validado para la suscripción a un ne newsletter: defineAction({ accept: 'form', input: z.object({ - email: z.string().email(), + email: z.email(), terms: z.boolean(), }), handler: async ({ email, terms }) => { /* ... */ }, @@ -703,7 +703,7 @@ export const onRequest = defineMiddleware(async (context, next) => { ## Seguridad al usar acciones -Las acciones son accesibles como endpoints públicos basados en el nombre de la acción. Por ejemplo, la acción `blog.like()` será accesible desde `/_actions/blog.like`. Esto es útil para realizar pruebas unitarias de los resultados de la acción y para depurar errores en producción. Sin embargo, esto significa que **debes** implementar las mismas verificaciones de autorización que considerarías para los endpoints de API y las páginas renderizadas bajo demanda. +Las acciones son accesibles como endpoints públicos basados en el nombre de la acción. Por ejemplo, la acción `blog.like()` será accesible desde `/_actions/blog.like`. Esto es útil para realizar pruebas unitarias de los resultados de la acción y para depurar errores en producción. Sin embargo, esto significa que **debes** usar las mismas verificaciones de autorización que considerarías para los endpoints de API y las páginas renderizadas bajo demanda. ### Autorizar usuarios desde un handler de acción @@ -739,20 +739,20 @@ Usa la función `getActionContext()` en tu middleware para obtener información El siguiente ejemplo rechaza todas las solicitudes de acción que no tengan un token de sesión válido. Si la verificación falla, se devuelve una respuesta de "Forbidden". Nota: este método asegura que las acciones solo sean accesibles cuando hay una sesión presente, pero *no* es un sustituto para una autorización segura. ```ts title="src/middleware.ts" -import { defineMiddleware } from 'astro:middleware'; -import { getActionContext } from 'astro:actions'; +import { defineMiddleware } from "astro:middleware"; +import { getActionContext } from "astro:actions"; export const onRequest = defineMiddleware(async (context, next) => { const { action } = getActionContext(context); // Verificar si la acción fue llamada desde una función del lado del cliente - if (action?.calledFrom === 'rpc') { + if (action?.calledFrom === "rpc") { // Si es así, verifica que exista un token de sesión de usuario - if (!context.cookies.has('user-session')) { - return new Response('Forbidden', { status: 403 }); + if (!context.cookies.has("user-session")) { + return new Response("Forbidden", { status: 403 }); } } - context.cookies.set('user-session', /* token de sesión */); + context.cookies.set("user-session", "session-token-value"); return next(); }); ```