Kada vaša web-aplikacija treba "pamtiti" korisnike, obično koristi jedan od dva mehanizma: kolačiće ili sesije. Kolačić je mali prostor za pohranu u pregledniku gdje možete čuvati korisničke podatke kao što su, na primjer, postavke pretraživanja. Umjesto toga sesije vam omogućuju pohranu osjetljivih informacija na poslužitelj.

Otkrijte kako postaviti sesije na Express poslužitelju koji pokreće Node.js.

Što ćete trebati

Da biste pratili ovaj vodič, trebate instalirati i Node.js i npm. Sve novije verzije Node.js treba doći sa npm, upravitelj paketa za instaliranje ovisnosti.

Koristit ćete npm za instaliranje Expressa i express-sessiona. Ovo su alati koje ćete koristiti za stvaranje web poslužitelja i sesije.

Što je sesija u Node.js?

Kolačić je mala datoteka koju vaš preglednik koristi za pohranu podataka. Možete koristiti kolačiće za pohranjivanje neosjetljivih podataka poput postavki pretraživanja.

Ne biste trebali spremati osjetljive podatke (kao što su korisnička imena i lozinke) u kolačiće. Kada vaš preglednik šalje kolačiće putem HTTP-a, oni su ranjivi na hakere koji bi ih mogli presresti. Oni su također pohranjeni u običnom tekstu na vašem računalu, tako da ih hakeri potencijalno mogu pregledati i ukrasti vaše podatke.

Umjesto spremanja osjetljivih podataka kao kolačića na klijentu, trebali biste ih pohraniti na poslužitelj. To ga štiti od vanjskog svijeta.

Sesije vam omogućuju pohranu osjetljivih podataka koji su vašoj aplikaciji potrebni za identifikaciju korisnika. Primjeri su korisničko ime, lozinka i e-pošta. Oni su sigurniji jer žive na poslužitelju, a ne na klijentu.

Svaki put kada imate podatke koje želite zadržati među zahtjevima, spremite ih na strani poslužitelja pomoću sesije. U sljedećem odjeljku naučit ćete kako stvoriti sesiju.

Stvaranje sesije u Express poslužitelju

Express je popularan web okvir za Node.js. Omogućuje vam postavljanje aplikacije web poslužitelja koja sluša zahtjeve klijenata na vašem odabranom broju priključka. Možete kreirati API rute, primijeniti međuprograme i čak povezati aplikaciju s bazom podataka, a sve zahvaljujući API-jima koje pruža okvir.

1. Stvorite projekt Node.js

Napravite potpuno novu mapu za svoj projekt, zatim pokrenite alat naredbenog retka i unesite CD u tu mapu.

Zatim pokrenite sljedeću naredbu za inicijalizaciju Node.js projekta:

npm init -y

Ovo generira datoteku package.json u korijenskoj mapi projekta sa zadanim postavkama. Datoteka package.json za pokretanje npm skripte.

2. Instalirajte Express i express-session

Koristit ćete Express za izradu aplikacije web poslužitelja. I ekspresna sesija za stvaranje sesija na toj poslužiteljskoj aplikaciji.

Na terminalu pokrenite sljedeću naredbu za instalaciju obje ovisnosti:

npm i express ekspresna sesija

Nakon instaliranja oba paketa, sljedeći korak bi bio kreiranje poslužitelja.

3. Stvorite sesije u aplikaciji

Stvorite datoteku pod nazivom App.js u korijenskoj mapi vašeg projekta i uvezite ovisnosti:

konst izraziti = zahtijevati('izraziti')
konst sesija = zahtijevati('ekspresna sjednica')
app = express()

Zatim registrirajte međuopreme sesije. Uđite u objekt pomoću tajna svojstvo (za potpisivanje kolačića sessionID) i kolačić.

app.use(
sjednica({
tajna: "neka tajna",
kolačić: { maxAge: 30000 },
spremi Neinicijalizirano: lažno,
})
);

Ovdje postavljate najveću dob sesije na 30 sekundi (30000 milisekundi). Postavljanje saveUnitialized na false bitno je ako imate sustav za prijavu. Ako to ne učinite, vaš poslužitelj će generirati novi sessionID svaki put kada korisnik pošalje zahtjev.

Zatim stvorite rutu za prijavu kako biste promijenili sesiju. Kada korisnik pogodi ovu rutu, očekujete da klijent pošalje korisničko ime i lozinku u tijelu zahtjeva. Prvo pristupate ovim vrijednostima i provjeravate postoje li (i je li se korisnik autentificirao):

app.post("/prijaviti se", (req, res) => {
konst { korisničko ime, lozinka } = req.body;

ako (korisničko ime Zaporka) {
ako (req.session.authenticated) {
res.json (sesija);
} drugo {
ako (lozinka "123") {
req.session.authenticated = pravi;
req.session.user = { korisničko ime };
res.json (req.session);
} drugo {
res.status(403).json({ poruka: "Loše vjerodajnice" });
}
}
} drugo {
res.status(403).json({ poruka: "Loše vjerodajnice" });
}
});

S prvom if naredbom izvodite lažnu provjeru. Ovom se provjerom osigurava da nastavljate samo ako su prisutni korisničko ime i lozinka.

Zatim provjerite je li korisnik već autentificiran. Ako je tako, pošaljite sesiju nazad klijentu. Ako nije, postavite autentificirano svojstvo na true i spremite korisničko ime u sesiju. Zatim ga pošaljite nazad klijentu.

Uz gornji kod, poslužitelj će zapamtiti svakog korisnika koji pošalje zahtjev poslužitelju. To je zato što su se autentificirali i imali svoje jedinstvene podatke (korisničko ime i lozinku) spremljene u sesiji.

Pokrenite svoj poslužitelj dodavanjem sljedećeg koda na dnu App.js:

app.listen(3000, () => {
konzola.log("Poslužitelj radi na portu 3000");
});

Za testiranje ove rute upotrijebite API klijent za slanje zahtjeva na rutu za prijavu koju ste izradili. Obavezno pošaljite korisničko ime i lozinku u tijelu zahtjeva. Evo kako bi vaš API zahtjev izgledao ako koristite Rest Client:

OBJAVI http://localhost: 3000/prijava HTTP/1.1
Vrsta sadržaja: "aplikacija/json"
{ Korisničko ime: "Kingsley", lozinka: "123"}

Ako sve bude u redu, dobit ćete sljedeći objekt:

{
"kolačić": {
"originalMaxAge": 30000,
"Samo http": pravi,
"staza": "/"
},
"ovjereno": pravi,
"korisnik": {
"Korisničko ime": "Kingsley",
"lozinka": "123"
}
}

S ovim kodom dogodile su se dvije stvari. Prvo ste se autentificirali na poslužitelju. Drugo, sesija sada ima vaše podatke za prijavu, tako da poslužitelj sada zna tko ste. Svaki put kad pošaljete novi zahtjev, zapamtit će vas sve dok sesija ne istekne i poslužitelj je ne ukloni.

Sesije poboljšavaju korisničko iskustvo

Sesije su vitalni dio Node.js aplikacija. To je zato što vam omogućuju održavanje stanja interakcije kroz mnoge zahtjeve i odgovore. Sesije su posebno važne za aplikacije koje zahtijevaju da se prijavite.

Koristite sesije u svojoj pozadinskoj aplikaciji za praćenje podataka specifičnih za korisnika. Primjer takvih podataka su artikli koje je vaš korisnik dodao u košaricu.

Bez sesija, morali biste održavati zasebnu pohranu podataka za svakog korisnika u vašoj aplikaciji. To bi bilo neučinkovito i povećalo bi složenost aplikacije.

Express.js pojednostavljuje sesije, usmjeravanje i više

Express.js najpopularniji je Node.js web okvir koji se trenutno koristi. Omogućuje mnoge alate i biblioteke za stvaranje pozadinskih aplikacija, a biblioteka ekspresne sesije samo je jedna od njih.

Ako želite koristiti Node.js za backend web razvoj, pogledajte Express.