Dilemmi della sicurezza informatica: Fughe di dati
La corsa al Natale è in pieno svolgimento. Alla ricerca di regali per i propri cari, le persone sono sempre più disposte a "prendere d'assalto" i negozi on-line
Remix è un framework web full-stack incentrato sui fondamenti del web e sulla moderna UX.
Sì, questo è un altro JS ma è necessario attendere ancora un po' perché questo framework è realizzato da Michael Jackson e Ryan Florence i ragazzi intelligenti dietro Router React. Spero di aver attirato la vostra attenzione, quindi vediamo cosa c'è di buono nella Struttura Remix.
Remix è un framework lato server costruito sulla base del framework API Web Fetch e Router React, ogni percorso in remix ha tre esportazioni primarie a caricatore
, un azione
e un valore predefinito componente
esportazione. Il caricatore
sarà richiamata sul server prima del rendering per fornire i dati alla rotta, la funzione azione
è responsabile della mutazione dei dati, l'esportazione predefinita è il componente che sarà reso su quella rotta. La funzione caricatore
e azione
Le funzioni vengono eseguite solo sul lato server e devono restituire un oggetto Risposta l'oggetto predefinito
L'esportazione viene eseguita sia sul lato server che sul lato client.
Per inizializzare un nuovo Remix progetto:
npx crea-remix@ultimo
IMPORTANTE: Scegliere "Solo le basi" e poi "Remix App Server" quando richiesto.
cd [come avete chiamato il progetto]
npm run dev
```
Aprire http://localhost:3000. il creare-remix
si otterrà un modello iniziale con la seguente struttura:
app
La cartella conterrà tutte le rotte dell'applicazione e codice.app/entry.client.jsx
è il primo pezzo di codice che viene eseguito nel browser ed è usato per idrato
i componenti dell'React.app/entry.server.jsx
è il primo pezzo di codice che viene eseguito quando una richiesta arriva al server; questo file rende la nostra applicazione React in una stringa/stream e la invia come risposta al client.app/root.jsx
è il punto in cui va il componente radice.app/route/
è il luogo in cui andranno tutti i moduli delle rotte, remix usa un instradamento basato sul file system.pubblico
è la cartella in cui vanno le risorse statiche (immagini/fonts/ecc.).remix.config.js
è dove si può impostare la configurazione del remix.Controlliamo un login.jsx
esempio di percorso all'interno di un'applicazione 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>
);
}
```
La prima cosa che accade qui è la caricatore
che controlla se l'utente ha già effettuato l'accesso con l'opzione isLoggedIn
e si reindirizzare
lui al /casella
altrimenti restituirà semplicemente un { success: true }
e poi viene resa la pagina di login.
Il Percorso di accesso
rende un modulo con un input per l'email e la password e un pulsante di invio. Stato
né una variabile onSubmit
nel nostro componente, è perché in remix ogni percorso può esportare un azione
e quando un modulo viene inviato con un oggetto POSTA
l'azione sarà richiamata e gestirà l'evento.
Quando il modulo viene inviato, il file azione
otterrà la funzione
FormData dal Richiesta oggetto const formData = await request.formData()
, allora stiamo costruendo il valori
con un'email e una password, l'oggetto formData.get('email')
cercherà il primo campo corrispondente all'interno del nostro modulo con un valore nome="email"
e restituire il suo valore. Verifichiamo se le credenziali sono corrette con il metodo verifyLogin
qui si può usare una qualsiasi libreria di validazione di schemi JS preferita e fare un'operazione di tipo recuperare
al backend personalizzato per verificare se i dati di login sono corretti, in caso affermativo reindirizzare
l'utente al /casella
altrimenti restituiamo un percorso json
con l'oggetto errors e un oggetto Codice di stato HTTP 400
, il useActionData
L'hook restituirà questo oggetto errors, se c'è, e condizionatamente renderà il messaggio di errore come in {actionData?.errors?.email && <div>{actionData.errors.email}</div>}
.
Il usaTransizione
ci dice tutto sullo stato di transizione della pagina, con l'opzione isSubmitting
controlliamo quando si verifica un invio, se c'è un invio si disabilitare
il pulsante di invio e mostrare Accesso....
invece di Accesso
potremmo anche mostrare all'utente uno spinner di caricamento o qualsiasi altra indicazione.
Il json
è solo una scorciatoia per creare applicazione/json
oggetti di risposta. Il usaLoaderData
restituisce i dati analizzati in JSON dalla rotta caricatore
, il useActionData
restituisce il percorso azione
dati analizzati.
Ogni rotta può anche esportare un file meta
responsabile dell'impostazione dei meta tag per il documento Html, in questo modo è possibile impostare un tag titolo
e un descrizione
per ogni percorso e aggiungere qualsiasi Open Graph o altri meta tag desiderati.
esportare const meta = () => {
const title = 'La mia pagina fantastica';
const description = 'Pagina super fantastica';
return {
charset: 'utf-8',
titolo,
descrizione,
parole chiave: 'Remix,Awesome',
twitter:image': 'https://awesome-page.com/awesome.png',
twitter:card': 'summarylargeimage',
twitter:creator': '@awesome',
twitter:site': '@awesome',
'twitter:title': titolo,
'twitter:description': descrizione,
};
};
esportare la funzione predefinita AwesomeRoute() {
return
Rotta impressionante
;
}
```
Abbiamo appena affrontato la punta dell'iceberg di Remix, c'è molto altro da sapere, ecco alcuni link utili:
L'aspetto positivo di Remix è che, migliorando con esso, migliorerete anche nei fondamenti del web, come avete visto molti dei link di questo articolo puntano al Documenti di MozillaQuesto è ciò che si intende quando si dice che Remix è incentrato sui fondamenti del Web e utilizza API Web come gli oggetti Response e Request per fornire agli utenti un'ottima UX, oltre a poter utilizzare tutte le tecniche e le librerie React preferite.
In questo articolo non abbiamo parlato di tutte le fantastiche funzionalità offerte da Remix, come ad esempio Percorsi annidati, Limiti di errore, Pile Remix ma comunque questo articolo dovrebbe darvi una buona idea della filosofia che sta alla base di Remix.