Wanneer uw webtoepassing gebruikers moet "onthouden", gebruikt deze meestal een van twee mechanismen: cookies of sessies. Een cookie is een klein opslaggebied in de browser waar u gebruikersgerelateerde gegevens, zoals bijvoorbeeld zoekvoorkeuren, kunt bewaren. Met sessies kunt u in plaats daarvan gevoelige informatie op de server opslaan.

Ontdek hoe u sessies opzet in een Express-server aangedreven door Node.js.

Wat je nodig hebt

Om deze zelfstudie te volgen, moet zowel Node.js als npm zijn geïnstalleerd. Elke recente versie van Node.js mee zou moeten komen npm, een pakketbeheerder voor het installeren van afhankelijkheden.

U gebruikt npm om Express en Express-session te installeren. Dit zijn de tools die u zult gebruiken om de webserver en sessie te maken.

Wat is een sessie in Node.js?

Een cookie is een klein bestand dat uw browser gebruikt om gegevens op te slaan. U kunt cookies gebruiken om niet-gevoelige gegevens zoals zoekvoorkeuren op te slaan.

Bewaar geen gevoelige gegevens (zoals gebruikersnamen en wachtwoorden) in cookies. Wanneer uw browser cookies via HTTP verzendt, zijn ze kwetsbaar voor hackers die ze mogelijk kunnen onderscheppen. Ze worden ook in platte tekst op uw computer opgeslagen, zodat hackers ze mogelijk kunnen inspecteren en uw gegevens kunnen stelen.

In plaats van gevoelige gegevens als een cookie op de client op te slaan, moet u deze op de server opslaan. Dit houdt het beschermd tegen de buitenwereld.

Met sessies kunt u gevoelige gegevens opslaan die uw app nodig heeft om de gebruiker te identificeren. Voorbeelden zijn gebruikersnaam, wachtwoord en e-mail. Ze zijn veiliger omdat ze op de server staan, niet op de client.

Elke keer dat u gegevens hebt die u wilt behouden voor verschillende verzoeken, slaat u deze op de server op met behulp van een sessie. In de volgende sectie leert u hoe u een sessie maakt.

Een sessie maken in een Express Server

Express is een populair webframework voor Node.js. Hiermee kunt u een webservertoepassing opzetten die luistert naar clientverzoeken op het door u gekozen poortnummer. U kunt API-routes maken, middleware toepassen en zelfs de applicatie verbinden met een database, allemaal dankzij de API's die door het framework worden geleverd.

1. Maak een Node.js-project

Maak een geheel nieuwe map voor uw project, start vervolgens uw opdrachtregelprogramma en cd in die map.

Voer vervolgens de volgende opdracht uit om een ​​Node.js-project te initialiseren:

npm begin -y

Dit genereert een bestand package.json in de hoofdmap van het project met de standaardinstellingen. Het bestand package.json voor uitvoering npm-scripts.

2. Installeer Express en express-sessie

U gebruikt Express om de webservertoepassing te maken. En express-sessie om sessies op die servertoepassing te maken.

Voer op de terminal de volgende opdracht uit om beide afhankelijkheden te installeren:

npm i express express-sessie

Nadat beide pakketten zijn geïnstalleerd, is de volgende stap het maken van de server.

3. Maak sessies in de app

Maak een bestand met de naam App.js in de hoofdmap van uw project en importeer de afhankelijkheden:

const uitdrukken = vereisen('nadrukkelijk')
const sessie = vereisen('express-sessie')
app = uitdrukken()

Registreer vervolgens de sessie-middleware. Geef een object door met de geheim eigenschap (voor het ondertekenen van de sessionID-cookie) en de cookie.

app.gebruik(
sessie({
geheim: "een geheim",
koekje: { maxLeeftijd: 30000 },
saveUninitialized: vals,
})
);

Hier stel je de hoogste leeftijd van de sessie in op 30 seconden (30000 milliseconden). Het instellen van saveUnitialized op false is essentieel als u een inlogsysteem heeft. Als u dit niet doet, genereert uw server elke keer dat de gebruiker een verzoek verzendt een nieuwe sessie-ID.

Maak vervolgens een inlogroute aan om de sessie te wijzigen. Wanneer een gebruiker deze route bereikt, verwacht u dat de client de gebruikersnaam en het wachtwoord in de aanvraagtekst verzendt. Eerst opent u deze waarden en controleert u of ze bestaan ​​(en of de gebruiker zich heeft geverifieerd):

app.post("/Log in", (req, res) => {
const { gebruikersnaam, wachtwoord } = req.body;

als (gebruikersnaam wachtwoord) {
als (verzoek.sessie.geverifieerd) {
res.json (sessie);
} anders {
als (wachtwoord "123") {
req.session.authenticated = WAAR;
req.session.user = { gebruikersnaam };
res.json (verzoek.sessie);
} anders {
res.status(403.json({ bericht: "Slechte referenties" });
}
}
} anders {
res.status(403.json({ bericht: "Slechte referenties" });
}
});

Met het eerste if statement voer je een dummy check uit. Deze controle is om ervoor te zorgen dat u alleen doorgaat als de gebruikersnaam en het wachtwoord aanwezig zijn.

Vervolgens controleer je of de gebruiker al is geauthenticeerd. Stuur de sessie dan terug naar de client. Als dit niet het geval is, stelt u de geverifieerde eigenschap in op True en slaat u de gebruikersnaam op in de sessie. Stuur het dan terug naar de klant.

Met de bovenstaande code onthoudt de server elke gebruiker die een verzoek naar de server stuurt. Dit komt omdat ze zich hebben geauthenticeerd en hun unieke gegevens (gebruikersnaam en wachtwoord) hebben opgeslagen in de sessie.

Start uw server door de volgende code onderaan App.js toe te voegen:

app.luister(3000, () => {
troosten.log("Server draait op poort 3000");
});

Om deze route te testen, gebruikt u een API-client om een ​​verzoek te verzenden naar de inlogroute die u hebt gemaakt. Zorg ervoor dat u de gebruikersnaam en het wachtwoord in de hoofdtekst van het verzoek verzendt. Hier ziet u hoe uw API-verzoek eruit zou zien als u Rest Client gebruikt:

POST-http://localhost: 3000/login HTTP/1.1
Inhoudstype: "toepassing/json"
{ gebruikersnaam: "Kingsley", wachtwoord: "123"}

Als alles goed gaat, krijg je het volgende object:

{
"koekje": {
"origineelMaxAge": 30000,
"Alleen http": WAAR,
"pad": "/"
},
"geverifieerd": WAAR,
"gebruiker": {
"gebruikersnaam": "Kingsley",
"wachtwoord": "123"
}
}

Met deze code zijn er twee dingen gebeurd. Eerst heb je je geauthenticeerd op de server. Ten tweede heeft de sessie nu uw inloggegevens, zodat de server nu weet wie u bent. Telkens wanneer u een nieuw verzoek verzendt, zal het u onthouden totdat de sessie verloopt en de server het verwijdert.

Sessies verbeteren de gebruikerservaring

Sessies zijn een essentieel onderdeel van Node.js-applicaties. Dit komt omdat ze u in staat stellen om een ​​staat van interactie te behouden tussen vele verzoeken en antwoorden. Sessies zijn vooral belangrijk voor toepassingen waarvoor u zich moet aanmelden.

Gebruik sessies in uw backend-applicatie om gebruikersspecifieke gegevens bij te houden. Een voorbeeld van dergelijke gegevens zijn de artikelen die uw gebruiker aan een winkelwagentje heeft toegevoegd.

Zonder sessies zou u voor elke gebruiker in uw toepassing een afzonderlijk gegevensarchief moeten onderhouden. Dit zou inefficiënt zijn en de complexiteit van de applicatie vergroten.

Express.js vereenvoudigt sessies, routering en meer

Express.js is het populairste Node.js-webframework dat momenteel in gebruik is. Het biedt veel tools en bibliotheken voor het maken van backend-applicaties, en de expressessiebibliotheek is er slechts een van.

Als je Node.js wilt gebruiken voor backend webontwikkeling, bekijk dan Express.