Dilemas de ciberseguridad: Filtraciones de datos
La fiebre prenavideña está en pleno apogeo. En busca de regalos para sus seres queridos, la gente está cada vez más dispuesta a "asaltar" las tiendas en línea
Remix es un framework web full-stack centrado en los fundamentos web y la UX moderna.
Sí, este es otro JS pero quédese un poco más, ya que este marco está hecho por Michael Jackson y Ryan Florence los tipos listos detrás Enrutador React. Espero haber captado su atención, así que veamos qué tiene de bueno el Marco de remezclas.
Remix es un marco de trabajo del lado del servidor construido sobre la plataforma API de obtención web y Enrutador Reactcada ruta en remix tiene tres exportaciones principales a cargador
, an acción
y un valor por defecto componente
exportación. En cargador
será llamada en el servidor antes de la renderización para proporcionar datos a la ruta, la función acción
es responsable de la mutación de datos, la exportación por defecto es el componente que se renderizará en esa ruta. La dirección cargador
y acción
sólo se ejecutan en el lado del servidor y deben devolver un valor Respuesta el objeto por defecto
La exportación se ejecuta tanto en el servidor como en el cliente.
Para inicializar un nuevo Remix proyecto:
npx create-remix@latest
IMPORTANTE: Elija "Sólo lo básico" y, a continuación, "Remix App Server" cuando se le solicite.
cd [cualquiera que sea el nombre del proyecto]
npm run dev
```
Abrir http://localhost:3000. la crear-remix
obtendrá una plantilla de inicio con la siguiente estructura:
aplicación
contendrá todas las rutas de su aplicación y código.app/entry.client.jsx
es el primer fragmento de código que se ejecuta en el navegador y se utiliza para hidrato
los componentes React.app/entry.server.jsx
es la primera pieza de código que se ejecuta cuando una solicitud llega al servidor, este archivo renderiza nuestra aplicación React a una cadena/flujo y envía eso como nuestra respuesta al cliente.app/root.jsx
es donde va el componente raíz.app/rutas/
es donde irán todos sus módulos de ruta, remix utiliza un enrutamiento basado en el sistema de archivos.público
es donde van tus activos estáticos (imágenes/fonts/etc).remix.config.js
es donde se puede establecer la configuración de la remezcla.Comprobemos un login.jsx
ejemplo de ruta dentro de una aplicación Remix:
import { redirect, json, Form, useActionData, useTransition } from 'remix';
import { isLoggedIn, verifyLogin } from '../auth';
export const loader = async ({ request }) => {
if (await isLoggedIn(request)) {
return redirect('/dashboard');
}
return json({ success: true });
};
export const action = async ({ request }) => {
const formData = await request.formData();
const values = {
email: formData.get('email') ?? '',
password: formData.get('password') ?? '',
};
const errors = await verifyLogin(values);
if (errors) {
return json({ errors }, { status: 400 });
}
return redirect('/dashboard');
};
export default function LoginRoute() {
const actionData = useActionData();
const transition = useTransition();
const isSubmitting = transition.state === 'submitting';
return (
Email
{actionData?.errors?.email &&
{actionData.errors.email}
}
<div>
<label htmlFor="password">Password</label>
<input id="password" name="password" type="password" />
{actionData?.errors?.password && (
<div>{actionData.errors.password}</div>
)}
</div>
<div>
<button type="submit" disabled={isSubmitting}>
{`Login ${isSubmitting ? '...' : ''}`}
</button>
</div>
</Form>
);
}
```
Lo primero que ocurre aquí es la cargador
para comprobar si el usuario ya ha iniciado sesión con la contraseña isLoggedIn
y se redirigir
él a la /tablero
si no, simplemente devolverá un { éxito: verdadero }
se genera la página de inicio de sesión.
En Ruta de acceso
muestra un formulario con una dirección de correo electrónico, una contraseña y un botón de envío. estado
variables ni un onSubmit
en nuestro componente, es porque en remix cada ruta puede exportar un acción
y cuando se envía un formulario con POST
la acción será llamada y manejará ese evento.
Cuando se envía el formulario, el acción
obtendrá el
FormData del Solicitar objeto const formData = await request.formData()
entonces estamos construyendo el valores
con una dirección de correo electrónico y una contraseña, el objeto formData.get('email')
buscará el primer campo coincidente dentro de nuestro formulario con un carácter name="correo electrónico"
y devolver su valor. Estamos comprobando si las credenciales son correctas con la propiedad verifyLogin
aquí podrías usar cualquiera de tus librerías de validación de esquemas JS favoritas y hacer un buscar
a su backend personalizado para comprobar si los datos de acceso son correctos, si es así redirigir
el usuario a la /tablero
si no, devolvemos un json
con el objeto de errores y una respuesta Código de estado HTTP 400
El useActionData
devolverá este objeto de errores si hay alguno y, condicionalmente, mostrará el mensaje de error como en {actionData?.errors?.email && <div>{actionData.errors.email}</div>}
.
En useTransition
nos dice todo sobre el estado de transición de la página, con el hook isSubmitting
variable estamos comprobando cuando se está produciendo un envío, si lo hay vamos a desactivar
el botón de enviar y mostrar Inicio de sesión....
en lugar de Inicio de sesión
también podríamos mostrar al usuario un spinner de carga o cualquier otra indicación en su lugar.
En json
es sólo un atajo para crear application/json
objetos de respuesta. La dirección useLoaderData
devuelve los datos JSON analizados de su ruta cargador
El useActionData
devuelve la ruta acción
datos analizados.
Cada ruta también puede exportar un meta
responsable de establecer las etiquetas meta para su documento Html, de esta forma puede establecer una función título
y un descripción
para cada ruta y añada cualquier metaetiqueta Open Graph o de otro tipo que desee.
export const meta = () => {
const title = 'Mi página super impresionante';
const description = 'Página super impresionante';
return {
charset: 'utf-8',
título,
descripción,
palabras clave: 'Remix,Awesome',
'twitter:image': 'https://awesome-page.com/awesome.png',
'twitter:card': 'summarylargeimage',
'twitter:creator': '@awesome',
'twitter:site': '@awesome',
'twitter:title': título,
'twitter:description': descripción,
};
};
export default function AwesomeRoute() {
devuelve
Ruta impresionante
;
}
```
Sólo hemos abordado la punta del iceberg sobre Remix, hay mucho más que saber, aquí tienes algunos enlaces útiles:
Lo bueno de Remix es que mejorando con él mejorarás en fundamentos web, como has visto muchos de los enlaces de este artículo apuntan al Documentación de MozillaEsto es lo que significa que Remix esté centrado en los fundamentos de la web, ya que utiliza APIs web como los objetos Response y Request para proporcionar a los usuarios una gran experiencia de usuario, además de que puedes seguir utilizando todas tus técnicas y librerías favoritas.
En este artículo no hemos hablado de todas las fantásticas funciones que ofrece Remix, como por ejemplo Rutas anidadas, Límites de error, Remezcla de pilas pero aun así, este artículo debería darte una buena idea de la filosofía que hay detrás de Remix.