Quando la tua applicazione web deve "ricordare" gli utenti, in genere utilizza uno dei due meccanismi: cookie o sessioni. Un cookie è una piccola area di archiviazione nel browser in cui è possibile conservare i dati relativi all'utente, ad esempio le preferenze di ricerca. Le sessioni ti consentono invece di archiviare informazioni riservate sul server.
Scopri come configurare le sessioni in un server Express basato su Node.js.
Di cosa avrai bisogno
Per seguire questo tutorial, devi installare sia Node.js che npm. Qualsiasi versione recente di Node.js dovrebbe venire con npm, un gestore di pacchetti per l'installazione delle dipendenze.
Utilizzerai npm per installare Express e express-session. Questi sono gli strumenti che utilizzerai per creare il server web e la sessione.
Che cos'è una sessione in Node.js?
Un cookie è un piccolo file che il tuo browser utilizza per memorizzare i dati. Puoi utilizzare i cookie per memorizzare dati non sensibili come le preferenze di ricerca.
Non dovresti memorizzare dati sensibili (come nomi utente e password) nei cookie. Quando il tuo browser invia cookie tramite HTTP, sono vulnerabili agli hacker che potrebbero essere in grado di intercettarli. Sono anche memorizzati in testo normale sul tuo computer, quindi gli hacker possono potenzialmente ispezionarli e rubare i tuoi dati.
Invece di salvare i dati sensibili come cookie sul client, dovresti memorizzarli sul server. Questo lo protegge dal mondo esterno.
Le sessioni ti consentono di archiviare i dati sensibili di cui la tua app ha bisogno per identificare l'utente. Esempi sono nome utente, password ed e-mail. Sono più sicuri perché risiedono sul server, non sul client.
Ogni volta che disponi di dati che desideri conservare tra le richieste, salvali sul lato server utilizzando una sessione. Imparerai come creare una sessione nella sezione seguente.
Creazione di una sessione in un Express Server
Express è un popolare framework web per Node.js. Ti consente di configurare un'applicazione server Web che ascolta le richieste del client al numero di porta scelto. Puoi creare percorsi API, applicare middleware e persino connettere l'applicazione a un database, tutto grazie alle API fornite dal framework.
1. Crea un progetto Node.js
Crea una cartella nuova di zecca per il tuo progetto, quindi avvia il tuo strumento da riga di comando e cd in quella cartella.
Successivamente, esegui il seguente comando per inizializzare un progetto Node.js:
npm init -y
Questo genera un file package.json nella cartella radice del progetto con l'impostazione predefinita. Il file package.json per l'esecuzione script npm.
2. Installa Express e express-session
Utilizzerai Express per creare l'applicazione del server web. E express-session per creare sessioni su quell'applicazione server.
Sul terminale, esegui il seguente comando per installare entrambe le dipendenze:
npm esprimo express-session
Dopo aver installato entrambi i pacchetti, il passo successivo sarebbe creare il server.
3. Crea sessioni nell'app
Crea un file denominato App.js nella cartella principale del tuo progetto e importa le dipendenze:
cost espresso = richiedere('esprimere')
cost sessione = richiedere('sessione espressa')
app = espresso()
Successivamente, registra il middleware di sessione. Passa un oggetto con il segreto property (per la firma del cookie sessionID) e il cookie.
app.use(
sessione({
segreto: "qualche segreto",
biscotto: { maxAge: 30000 },
saveNon inizializzato: falso,
})
);
Qui si imposta l'età massima della sessione a 30 secondi (30000 millisecondi). L'impostazione di saveUnitialized su false è essenziale se si dispone di un sistema di accesso. Se non lo fai, il tuo server genererà un nuovo ID sessione ogni volta che l'utente invia una richiesta.
Successivamente, crea un percorso di accesso per modificare la sessione. Quando un utente raggiunge questo percorso, ti aspetti che il client invii il nome utente e la password nel corpo della richiesta. Innanzitutto, accedi a questi valori e controlla se esistono (e se l'utente si è autenticato):
app.post("/login", (req, res) => {
cost { username, password } = req.body;
Se (nome utente && password) {
Se (richiesta.sessione.autenticata) {
res.json (sessione);
} altro {
Se (parola d'ordine "123") {
req.session.authenticated = VERO;
req.session.user = { nome utente };
res.json (req.session);
} altro {
res.stato(403).json({ msg: "Pessime credenziali" });
}
}
} altro {
res.stato(403).json({ msg: "Pessime credenziali" });
}
});
Con la prima istruzione if, esegui un controllo fittizio. Questo controllo serve a garantire che tu proceda solo se il nome utente e la password sono presenti.
Successivamente, controlli se l'utente è già autenticato. In tal caso, rimandare la sessione al client. In caso contrario, imposta la proprietà authenticated su true e salva il nome utente nella sessione. Quindi rispediscilo al cliente.
Con il codice sopra, il server ricorderà ogni utente che invia una richiesta al server. Questo perché si sono autenticati e i loro dati univoci (nome utente e password) sono stati salvati nella sessione.
Avvia il tuo server aggiungendo il seguente codice nella parte inferiore di App.js:
app.ascolta(3000, () => {
consolare.tronco d'albero("Il server è in esecuzione sulla porta 3000");
});
Per testare questa route, utilizza un client API per inviare una richiesta alla route di accesso che hai creato. Assicurati di inviare il nome utente e la password nel corpo della richiesta. Ecco come sarebbe la tua richiesta API se utilizzi Rest Client:
POST http://localhost: 3000/login HTTP/1.1
Tipo di contenuto: "applicazione/json"
{ nome utente: "Kingsley", parola d'ordine: "123"}
Se tutto va bene, otterrai il seguente oggetto:
{
"biscotto": {
"originaleMaxAge": 30000,
"httpSolo": VERO,
"sentiero": "/"
},
"autenticato": VERO,
"utente": {
"nome utente": "Kingsley",
"parola d'ordine": "123"
}
}
Con questo codice sono successe due cose. Innanzitutto, ti sei autenticato sul server. In secondo luogo, la sessione ora ha i tuoi dettagli di accesso, quindi il server ora sa chi sei. Ogni volta che invii una nuova richiesta, ti ricorderà fino a quando la sessione non scade e il server la rimuove.
Le sessioni migliorano l'esperienza dell'utente
Le sessioni sono una parte vitale delle applicazioni Node.js. Questo perché ti consentono di mantenere uno stato di interazione tra molte richieste e risposte. Le sessioni sono particolarmente importanti per le applicazioni che richiedono l'accesso.
Utilizza le sessioni nell'applicazione di back-end per tenere traccia dei dati specifici dell'utente. Un esempio di tali dati sono gli articoli che l'utente ha aggiunto a un carrello.
Senza sessioni, dovresti mantenere un archivio dati separato per ogni utente nella tua applicazione. Ciò sarebbe inefficiente e aumenterebbe la complessità dell'applicazione.
Express.js semplifica le sessioni, il routing e altro ancora
Express.js è il framework web Node.js più popolare attualmente in uso. Fornisce molti strumenti e librerie per la creazione di applicazioni back-end e la libreria express-session è solo una di queste.
Se desideri utilizzare Node.js per lo sviluppo web back-end, dai un'occhiata a Express.