Kai jūsų žiniatinklio programa turi „atsiminti“ vartotojus, ji paprastai naudoja vieną iš dviejų mechanizmų: slapukus arba seansus. Slapukas yra nedidelė naršyklės saugyklos sritis, kurioje galite saugoti su naudotoju susijusius duomenis, pvz., paieškos nuostatas. Seansai leidžia saugoti slaptą informaciją serveryje.
Sužinokite, kaip nustatyti seansus „Express“ serveryje, kurį maitina „Node.js“.
Ko Jums prireiks
Norėdami sekti šią mokymo programą, turite įdiegti ir Node.js, ir npm. Bet kuri naujausia versija Node.js turėtų ateiti su npm, paketų tvarkyklė, skirta diegti priklausomybes.
Norėdami įdiegti „Express“ ir „Express-session“, naudosite npm. Tai įrankiai, kuriuos naudosite kurdami žiniatinklio serverį ir seansą.
Kas yra Node.js sesija?
Slapukas yra mažas failas, kurį jūsų naršyklė naudoja duomenims saugoti. Galite naudoti slapukus, kad saugotumėte neskelbtinus duomenis, pvz., paieškos nuostatas.
Slapukuose neturėtumėte saugoti neskelbtinų duomenų (tokių kaip vartotojo vardai ir slaptažodžiai). Kai naršyklė siunčia slapukus per HTTP, jie yra pažeidžiami įsilaužėlių, kurie gali juos perimti. Jie taip pat saugomi paprastu tekstu jūsų kompiuteryje, todėl įsilaužėliai gali juos apžiūrėti ir pavogti jūsų duomenis.
Užuot išsaugoję slaptus duomenis kaip slapuką kliente, turėtumėte juos saugoti serveryje. Tai apsaugo jį nuo išorinio pasaulio.
Seansai leidžia saugoti neskelbtinus duomenis, kurių programai reikia norint identifikuoti naudotoją. Pavyzdžiai yra vartotojo vardas, slaptažodis ir el. Jie yra saugesni, nes gyvena serveryje, o ne kliente.
Kiekvieną kartą, kai turite duomenų, kuriuos norite išsaugoti visose užklausose, išsaugokite juos serverio pusėje naudodami seansą. Kaip sukurti sesiją, sužinosite kitame skyriuje.
Seanso kūrimas Express serveryje
Express yra populiari žiniatinklio sistema, skirta Node.js. Tai leidžia nustatyti žiniatinklio serverio programą, kuri išklauso kliento užklausas pasirinktu prievado numeriu. Galite kurti API maršrutus, taikyti tarpinę programinę įrangą ir netgi prijungti programą prie duomenų bazės – visa tai dėka sistemos teikiamų API.
1. Sukurkite Node.js projektą
Sukurkite visiškai naują projekto aplanką, tada paleiskite komandų eilutės įrankį ir kompaktinį diską į tą aplanką.
Tada paleiskite šią komandą, kad inicijuotų Node.js projektą:
npm init -y
Tai sugeneruoja paketą.json failą projekto šakniniame aplanke su numatytosiomis sąrankomis. Paleisties failas package.json npm scenarijus.
2. Įdiekite „Express“ ir „Express-session“.
Norėdami sukurti žiniatinklio serverio programą, naudosite Express. Ir greitasis seansas seansams kurti toje serverio programoje.
Terminale paleiskite šią komandą, kad įdiegtumėte abi priklausomybes:
npm i express greitasis seansas
Įdiegę abu paketus, kitas žingsnis būtų sukurti serverį.
3. Kurkite seansus programoje
Projekto šakniniame aplanke sukurkite failą pavadinimu App.js ir importuokite priklausomybes:
konst išreikšti = reikalauti("išreikšti")
konst sesija = reikalauti(„ekspresinė sesija“)
programa = express ()
Tada užregistruokite sesijos tarpinę programinę įrangą. Įveskite objektą su paslaptis nuosavybė (skirta pasirašyti sessionID slapuką) ir slapukas.
app.use(
sesija ({
paslaptis: "kažkokia paslaptis",
slapukas: { maxAge: 30000 },
išsaugoti neinicializuotas: klaidinga,
})
);
Čia nustatote didžiausią seanso amžių iki 30 sekundžių (30000 milisekundėmis). Jei turite prisijungimo sistemą, labai svarbu nustatyti saveUnitialized kaip false. Jei to nepadarysite, serveris sugeneruos naują sesijos ID kiekvieną kartą, kai vartotojas išsiųs užklausą.
Tada sukurkite prisijungimo maršrutą, kad pakeistumėte sesiją. Kai vartotojas pasiekia šį maršrutą, tikitės, kad klientas atsiųs vartotojo vardą ir slaptažodį užklausos turinyje. Pirmiausia pasieksite šias reikšmes ir patikrinkite, ar jos egzistuoja (ir ar vartotojas patvirtino):
app.post("/Prisijungti", (req, res) => {
konst { vartotojo vardas, slaptažodis } = req.body;
jeigu (vartotojo vardas Slaptažodis) {
jeigu (req.session.authenticated) {
res.json (sesija);
} Kitas {
jeigu (Slaptažodis "123") {
req.session.authenticated = tiesa;
req.session.user = { vartotojo vardas };
res.json (req.session);
} Kitas {
res.status(403.json({ žinutė: „Blogi kredencialai“ });
}
}
} Kitas {
res.status(403.json({ žinutė: „Blogi kredencialai“ });
}
});
Naudodami pirmąjį if teiginį, atliekate netikrą patikrinimą. Šis patikrinimas skirtas užtikrinti, kad tęstumėte tik tada, kai yra vartotojo vardas ir slaptažodis.
Tada patikrinkite, ar vartotojas jau patvirtintas. Jei taip, išsiųskite seansą atgal klientui. Jei ne, nustatykite autentifikuotą ypatybę į „true“ ir išsaugokite vartotojo vardą seansui. Tada nusiųskite jį atgal klientui.
Naudodamas aukščiau pateiktą kodą, serveris atsimins kiekvieną vartotoją, kuris siunčia serveriui užklausą. Taip yra todėl, kad jie buvo autentifikuoti ir seanso metu buvo išsaugota unikali informacija (vartotojo vardas ir slaptažodis).
Paleiskite serverį pridėdami šį kodą App.js apačioje:
app.listen(3000, () => {
konsolė.log(„Serveris veikia 3000 prievade“);
});
Norėdami išbandyti šį maršrutą, naudokite API klientą, kad išsiųstumėte užklausą į sukurtą prisijungimo maršrutą. Užklausos tekste būtinai atsiųskite vartotojo vardą ir slaptažodį. Štai kaip atrodytų jūsų API užklausa, jei naudojate „Rest Client“:
PASKELBTI http://localhost: 3000/login HTTP/1.1
Turinio tipas: "application/json"
{ Vartotojo vardas: "Kingsley", Slaptažodis: "123"}
Jei viskas klostysis gerai, gausite šį objektą:
{
"slapukas": {
"originalMaxAge": 30000,
„Tik http“: tiesa,
"kelias": "/"
},
"autentifikuota": tiesa,
"Vartotojas": {
"Vartotojo vardas": "Kingsley",
"Slaptažodis": "123"
}
}
Su šiuo kodu atsitiko du dalykai. Pirma, jūs autentifikavotės serveryje. Antra, sesijoje dabar yra jūsų prisijungimo duomenys, todėl serveris dabar žino, kas jūs esate. Kiekvieną kartą, kai išsiųsite naują užklausą, ji jus prisimins, kol baigsis seansas ir serveris ją pašalins.
Seansai pagerina vartotojo patirtį
Seansai yra svarbi Node.js programų dalis. Taip yra todėl, kad jie leidžia išlaikyti sąveikos būseną daugelyje užklausų ir atsakymų. Seansai ypač svarbūs programoms, prie kurių reikia prisijungti.
Naudokite seansus savo foninėje programoje, kad galėtumėte sekti konkrečius vartotojo duomenis. Tokių duomenų pavyzdys yra prekės, kurias naudotojas įdėjo į pirkinių krepšelį.
Be seansų turėtumėte turėti atskirą duomenų saugyklą kiekvienam vartotojui programoje. Tai būtų neefektyvu ir padidintų taikymo sudėtingumą.
Express.js supaprastina seansus, maršrutą ir dar daugiau
Express.js yra populiariausia šiuo metu naudojama Node.js žiniatinklio sistema. Jame yra daug įrankių ir bibliotekų, skirtų kurti pagrindines programas, o greitųjų seansų biblioteka yra tik viena iš jų.
Jei norite naudoti „Node.js“ žiniatinklio kūrimui, patikrinkite „Express“.