Når din webapplikation skal "huske" brugere, bruger den typisk en af to mekanismer: cookies eller sessioner. En cookie er et lille lagringsområde i browseren, hvor du kan opbevare brugerrelaterede data som for eksempel søgepræferencer. Sessioner giver dig mulighed for i stedet at gemme følsomme oplysninger på serveren.
Opdag, hvordan du opsætter sessioner på en Express-server, der drives af Node.js.
Hvad du skal bruge
For at følge denne vejledning skal du have både Node.js og npm installeret. Enhver nyere version af Node.js skal med npm, en pakkehåndtering til installation af afhængigheder.
Du skal bruge npm til at installere Express og express-session. Dette er de værktøjer, du skal bruge til at oprette webserveren og sessionen.
Hvad er en session i Node.js?
En cookie er en lille fil, som din browser bruger til at gemme data. Du kan bruge cookies til at gemme ikke-følsomme data som søgepræferencer.
Du bør ikke gemme følsomme data (såsom brugernavne og adgangskoder) i cookies. Når din browser sender cookies over HTTP, er de sårbare over for hackere, som muligvis kan opsnappe dem. De er også gemt i almindelig tekst på din computer, så hackere kan potentielt inspicere dem og stjæle dine data.
I stedet for at gemme følsomme data som en cookie på klienten, bør du gemme dem på serveren. Dette holder det beskyttet mod omverdenen.
Sessioner giver dig mulighed for at gemme følsomme data, som din app har brug for for at identificere brugeren. Eksempler er brugernavn, adgangskode og e-mail. De er mere sikre, fordi de bor på serveren, ikke klienten.
Hver gang du har data, som du vil bestå på tværs af anmodninger, skal du gemme dem på serversiden ved hjælp af en session. Du lærer, hvordan du opretter en session, i det følgende afsnit.
Oprettelse af en session i en Express Server
Express er en populær webramme for Node.js. Det lader dig opsætte en webserverapplikation, der lytter til klientanmodninger på dit valgte portnummer. Du kan oprette API-ruter, anvende middleware og endda forbinde applikationen til en database, alt sammen takket være de API'er, som rammen leverer.
1. Opret et Node.js-projekt
Opret en helt ny mappe til dit projekt, og start derefter dit kommandolinjeværktøj og cd i den mappe.
Kør derefter følgende kommando for at initialisere et Node.js-projekt:
npm init -y
Dette genererer en package.json-fil i projektets rodmappe med standardopsætningen. Package.json-filen til at køre npm scripts.
2. Installer Express og express-session
Du skal bruge Express til at oprette webserverapplikationen. Og express-session for at oprette sessioner på den serverapplikation.
På terminalen skal du køre følgende kommando for at installere begge afhængigheder:
npm jeg udtrykker express-session
Efter at have installeret begge pakker, ville det næste trin være at oprette serveren.
3. Opret sessioner i appen
Opret en fil med navnet App.js i dit projekts rodmappe og importer afhængighederne:
konst udtrykke = kræve('udtrykke')
konst session = kræve('ekspress-session')
app = express()
Derefter skal du registrere sessions-middlewaren. Send en genstand ind med hemmelighed ejendom (til signering af sessionID-cookien) og cookien.
app.brug(
session({
hemmelighed: "en eller anden hemmelighed",
cookie: { maxAlder: 30000 },
gemUinitialiseret: falsk,
})
);
Her indstiller du sessionens højeste alder til 30 sekunder (30000 millisekunder). Det er vigtigt at indstille saveUnitialized til false, hvis du har et login-system. Hvis du undlader at gøre det, vil din server generere et nyt session-ID, hver gang brugeren sender en anmodning.
Opret derefter en login-rute for at ændre sessionen. Når en bruger rammer denne rute, forventer du, at klienten sender brugernavnet og adgangskoden i forespørgselsteksten. Først får du adgang til disse værdier og tjekker, om de eksisterer (og om brugeren har godkendt):
app.post("/Log på", (req, res) => {
konst { brugernavn, adgangskode } = req.body;
hvis (brugernavn Kodeord) {
hvis (req.session.authenticated) {
res.json (session);
} andet {
hvis (adgangskode "123") {
req.session.authenticated = rigtigt;
req.session.user = { brugernavn };
res.json (req.session);
} andet {
res.status(403).json({ besked: "Dårlige legitimationsoplysninger" });
}
}
} andet {
res.status(403).json({ besked: "Dårlige legitimationsoplysninger" });
}
});
Med den første if-erklæring udfører du et dummy-tjek. Denne kontrol er for at sikre, at du kun fortsætter, hvis brugernavnet og adgangskoden er til stede.
Dernæst tjekker du, om brugeren allerede er godkendt. Hvis ja, send sessionen tilbage til klienten. Hvis ikke, skal du indstille den autentificerede egenskab til sand og gemme brugernavnet i sessionen. Send det derefter tilbage til klienten.
Med ovenstående kode vil serveren huske hver bruger, der sender en anmodning til serveren. Dette skyldes, at de har autentificeret og fået deres unikke detaljer (brugernavn og adgangskode) gemt i sessionen.
Start din server ved at tilføje følgende kode i bunden af App.js:
app.lyt(3000, () => {
konsol.log("Serveren kører på port 3000");
});
For at teste denne rute skal du bruge en API-klient til at sende en anmodning til den login-rute, du har oprettet. Sørg for at sende brugernavn og adgangskode i anmodningens brødtekst. Sådan vil din API-anmodning se ud, hvis du bruger Rest Client:
POST http://localhost: 3000/login HTTP/1.1
Indholdstype: "applikation/json"
{ brugernavn: "Kingsley", adgangskode: "123"}
Hvis alt går godt, får du følgende objekt:
{
"småkage": {
"originalMaxAge": 30000,
"Kun http": rigtigt,
"sti": "/"
},
"godkendt": rigtigt,
"bruger": {
"brugernavn": "Kingsley",
"adgangskode": "123"
}
}
Med denne kode er der sket to ting. Først har du autentificeret på serveren. For det andet har sessionen nu dine loginoplysninger, så serveren nu ved, hvem du er. Hver gang du sender en ny anmodning, vil den huske dig, indtil sessionen udløber, og serveren fjerner den.
Sessioner forbedrer brugeroplevelsen
Sessioner er en vital del af Node.js-applikationer. Dette skyldes, at de giver dig mulighed for at opretholde en tilstand af interaktion på tværs af mange anmodninger og svar. Sessioner er især vigtige for applikationer, der kræver, at du logger ind.
Brug sessioner i din backend-applikation til at holde styr på brugerspecifikke data. Et eksempel på sådanne data er de varer, din bruger har tilføjet til en indkøbskurv.
Uden sessioner ville du skulle opretholde et separat datalager for hver bruger i din applikation. Dette ville være ineffektivt og øge kompleksiteten af applikationen.
Express.js forenkler sessioner, routing og mere
Express.js er den mest populære Node.js-webramme, der er i brug i øjeblikket. Det giver mange værktøjer og biblioteker til at skabe backend-applikationer, og ekspressessionsbiblioteket er kun en af dem.
Hvis du vil bruge Node.js til backend-webudvikling, så tjek Express.