Vartotojo autentifikavimas – tai vartotojo, bandančio pasiekti jūsų programą, tapatybės patikrinimo procesas. Tai apima įgaliojimų suteikimą ir kredencialų perdavimą, kad būtų patvirtintas vartotojo autentiškumas.

Galite įdiegti paprastą vartotojo autentifikavimo modelį Node.js naudodami Express, Bcrypt ir MongoDB, atlikdami vos kelis veiksmus.

1 veiksmas: kūrimo aplinkos nustatymas

Pirmiausia sukurkite projekto aplanką ir cd į jį paleisdami:

mkdir vartotojo autentifikavimas
cd vartotojo autentifikavimas

Tada inicijuokite npm savo projekto kataloge vykdydami:

npm init -y

The -y vėliavėlė inicijuoja npm ir sukuria jūsų package.json failą su visais numatytais parametrais.

Šiam vartotojo autentifikavimo modeliui reikalingos kelios priklausomybės.

Jie įtraukia:

  • Express: Express yra Node.js sistema kuri suteikia tvirtą funkcijų rinkinį žiniatinklio ir mobiliosioms programoms. Tai leidžia lengviau kurti pagrindines programas naudojant Node.js.
  • Bcrypt: bcrypt yra npm paketas, įgyvendinantis bcrypt slaptažodžio maišos funkciją. Tai leidžia jums sukurti maišą iš paprastų slaptažodžių eilučių.
  • instagram viewer
  • Mongoose: Mongoose yra MongoDB objektų duomenų modeliavimo biblioteka. Tai supaprastina jūsų programos ir MongoDB duomenų bazės sąveiką.
  • dotenv: dotenv yra nulinės priklausomybės paketas, įkeliantis aplinkos kintamuosius iš a .env failą į procesas.aplink.
  • Validatorius: tikrintuvas yra paketas, kuriame yra įvairių eilučių tikrinimo funkcijų.
  • Body-analitikas: turinio analizavimo paketas analizuoja užklausų turinį tarpinėje programinėje įrangoje prieš jūsų tvarkytojus.

Įdiekite paketus paleisdami:

npm diegti express bcrypt mongoose dotenv patvirtinimo priemonė kūnas- analizatorius

Tada sukurkite an app.js failą savo projekto šakniniame kataloge ir pridėkite toliau pateiktą kodo bloką, kad sukurtumėte pagrindinį „Express“ serverį:

// app.js
konst išreikšti = reikalauti(„išreikšti“);
konst programa = express ();
konst bodyParser = reikalauti(„kūno analizatorius“);

konst prievadas = 3000;

programėlė.naudoti(bodyParser.json());
programėlė.naudoti(bodyParser.urlencoded({ pratęstas: tiesa }));

app.listen (port, ()=>{
konsolė.log(„Programa klausosi prievado ${port}`);
});

Šis kodas sukuria greitosios programos egzempliorių, iškviesdamas greitąją funkciją. Tada jis naudoja kūno analizatorius tarpinė programinė įranga, skirta analizuoti gaunamus užklausų elementus. Tada jis pradeda klausytis srauto 3000 prievade, iškviesdamas greitojo egzemplioriaus klausymo metodą ir perduodamas prievado kintamąjį kaip argumentą.

2 veiksmas: prijunkite programą prie duomenų bazės

Savo projekto šakniniame kataloge sukurkite a .env failą ir saugokite jame savo MongoDB kredencialus. Taip išvengsite duomenų bazės kredencialų atskleidimo kode, kuris gali suteikti kenkėjiškiems vartotojams prieigą prie jūsų duomenų bazės.

Tada eikite į savo app.js failą ir importuoti mangustą:

konst mangustas = reikalauti(„mangustas“);

Tada skambinkite importui dotenv ir paskambink konfig metodas ant jo:

reikalauti ("dotenv".config();

Skambindamas į konfig metodas įjungtas dotenv įkelia aplinkos kintamuosius į procesas.aplink.

Galiausiai įjunkite prisijungimo metodą mangustas ir perduokite savo MongoDB URI kaip argumentą:

mongoose.connect (process.env. MONGODB_URI).tada(() => {
console.log('Sėkmingai prisijungta prie duomenų bazės')
})

3 veiksmas: vartotojo modelio kūrimas

Savo projekto šakniniame kataloge sukurkite „modeliai” aplankas; čia laikysite savo mangusto modelį:

mkdir modeliai

Tada sukurkite „vartotojo modelis“ failą ir pridėkite šiuos importuotus elementus:

konst mangustas = reikalauti(„mangustas“)
konst { isEmail } = reikalauti("tvirtiklis")

isEmail yra patvirtinimo funkcija, kuri grąžina tiesa jei nurodyta eilutė yra el. Jums reikės, kad jūsų vartotojo modeliui pritaikytumėte mongoose patvirtinimą.

Tada pridėkite šį kodą prie savo vartotojo modelis failas:

// modeliai/vartotojo modelis
konst userSchema = mangustas. Schema({
paštas: {
tipas: Styga,
reikalinga: [tiesa, 'Būtinas el'],
patvirtinti: {
tikrintuvas: isEmail,
žinutė: rekvizitai => `${props.value} el. pašto adresas nėra galiojantis“.
}
},

Slaptažodis: {
tipas: Styga,
reikalinga: [tiesa, 'reikalingas slaptazodis'],
patvirtinti: {
tikrintuvas: funkcija (vertė) {
grąžinti vertė.ilgis >= 6
},
žinutė: () =>'Slaptažodis turi būti bent šešių simbolių ilgio'
}
}
})

modulis.eksportas = mongoose.model('Vartotojas', userSchema)

Aukščiau pateiktas kodas sukuria a naudotojo schema kintamasis, kuris saugo reikšmę mangustas. Schema metodas. Mangustas. Schemos metodas susieja ypatybes su MongoDB rinkiniu ir apibrėžia joje esančių dokumentų formą. Manguto schema turi dvi savybes - an paštu ir a Slaptažodis– tai bus jūsų autentifikavimo reikalavimai.

El. pašto ypatybė yra eilutės tipo ir turi reikalaujama nustatyti kaip tiesa. Pridedamas klaidos pranešimas „Reikalingas el. paštas“ bus rodomas, jei užklausos turinyje nėra paštu nuosavybė. Galiausiai, naudojant individualų mongoose patvirtinimą, tikrintuvas nuosavybės referentai isEmail funkcija. Ši funkcija grąžina teisingą arba klaidingą, atsižvelgiant į eilutės, kaip el. laiško, galiojimą. Tada pranešimo ypatybė paima el. pašto reikšmę (rekvizitai) ir sukuria prasmingą klaidos pranešimą.

Slaptažodžio ypatybė yra būtinas eilutės tipas su klaidos pranešimu „Reikalingas slaptažodis“. The tikrintuvas funkcija yra anoniminė, kuri grąžina teisingą, jei slaptažodis yra bent šešių simbolių ilgio.

Paskutinė eilutė sukuria ir eksportuoja mangusto modelį skambinant modelis metodas įjungtas mangustas. Perduokite modelio pavadinimą (Vartotojas) kaip pirmasis argumentas ir schema (naudotojo schema) kaip antrasis argumentas.

4 veiksmas: įdiekite prisijungimo ir prisiregistravimo maršrutus

Savo projekto šakniniame kataloge sukurkite a maršrutai aplankas:

mkdir maršrutai

Maršrutų aplanke sukurkite a userRoutes.js failą ir pridėkite šiuos importuotus elementus:

// routes/userRoutes.js
konst išreikšti = reikalauti(„išreikšti“);
konst Vartotojas = reikalauti(../models/userModel");
konst bcrypt = reikalauti(„bcrypt“);

Sukurkite „Express Router“ egzempliorių skambindami Maršrutizatorius metodas įjungtas išreikšti:

konst maršrutizatorius = greitasis. Maršrutizatorius ();

Tada sukurkite savo registracijos maršrutą, pridėdami toliau esantį kodo bloką prie savo userRoute.js failas:

router.post("/sign-up", async (req, res) => {
bandyti {
// Ištraukite el. pašto adresą ir slaptažodį iš req.body objekto
konst { el. paštas, slaptažodis } = req.body;

// Patikrintijeigu paštas yra jau innaudoti
leisti userExists = laukti User.findOne({ el. paštas });

if (userExists) {
res.status(401.json({ pranešimas: "El. paštas jau yra naudoti.&citata; });
grąžinti;
}

// Apibrėžkite druskos ratus
konst druskaApvaliai = 10;

// Maišos slaptažodis
bcrypt.hash (slaptažodis, saltRounds, (err, hash) => {
jeigu (klaida) mestinaujasKlaida(„Vidinis serveris Klaida");

// Sukurti a naujasVartotojas
leisti vartotojas = naujas Vartotojas({
paštas,
Slaptažodis: maišos,
});

// Išsaugoti vartotoją duomenų bazėje
vartotojas.išsaugoti().tada(() => {
res.json({ pranešimas: "Vartotojas sėkmingai sukurtas", Vartotojas });
});
});
} sugauti (err) {
grąžintires.statusas(401).atsiųsti(klysti.pranešimas);
}
});

Aukščiau esančiame kodo bloke pirmiausia išgryninote el. pašto ir slaptažodžio struktūrą req.body objektas. Tada patikrinkite, ar vartotojas jau naudoja el. paštą, nes jis turi būti unikalus kiekvienam vartotojui. Jei el. paštas jau buvo panaudotas, grąžinate ir sustabdote kodo vykdymą su 401 būsenos kodu.

Paprastų slaptažodžių saugojimas duomenų bazėje yra didžiulė grėsmė saugumui, nes kenkėjiški įsilaužėliai gali gauti prieigą prie duomenų bazės. Prieš įtraukdami slaptažodžius į duomenų bazę, turėtumėte sumaišyti slaptažodžius, todėl net jei įsilaužėlis juos aptinka, vartotojams neturėtų kilti pavojaus. Maišos keitimas yra tam tikro „rakto“ konvertavimo į kitą reikšmę procesas. Maišos keitimas yra vienpusė funkcija, o tai reiškia, kad, priešingai nei šifruojant, negalite gauti pradinės vertės iš maišytos vertės.

Naudodami bcrypt padarėte maišą savo vartotojo slaptažodį iškviesdami maišos metodą „bcrypt“. Maišos metodas apima tris parametrus: eilutę, kuriai reikia maišyti, druskos raundų ir atgalinio iškvietimo funkciją. Perduodate vartotojo slaptažodį, anksčiau sukurtą saltRounds kintamąjį ir atgalinį skambutį.

Druskos raundai nurodo laiką, reikalingą vienam bcrypt maišos skaičiavimui. Kuo didesnis druskos raundų skaičius, tuo daugiau maišos raundų.

Jei maišos metodas pateikia klaidą, jūs pateikiate „vidinę serverio klaidą“. Kitu atveju slaptažodžio ypatybę nustatote į sėkmingą maišą ir išsaugokite ją savo duomenų bazėje, iškviesdami išsaugojimo metodą Vartotojas instancija.

Tada sukurkite savo prisijungimo maršrutą, pridėdami toliau esantį kodo bloką prie savo userRoute.js failas:

router.post("/sign-in", async (req, res) => {
bandyti {
// Ištraukite el. pašto adresą ir slaptažodį iš req.body objekto
konst { el. paštas, slaptažodis } = req.body;

// PatikrintijeiguVartotojasegzistuojainduomenų bazėje
leisti vartotojas = laukti User.findOne({ el. paštas });

if (!vartotojas) {
return res.status (401).json({ pranešimas: "Netinkami kredencialai" });
}

// Palyginkite slaptažodžius
bcrypt.compare (slaptažodis, vartotojo.slaptažodis, (err, rezultatas) => {
if (rezultatas) {
return res.status (200).json({ pranešimas: "Vartotojas sėkmingai prisijungė" });
}

konsolė.log (err);
return res.status (401).json({ pranešimas: "Netinkami kredencialai" });
});
} sugauti (klaida) {
res.statusas(401).atsiųsti(klysti.pranešimas);
}
});

modulis.eksportas = maršrutizatorius;

Aukščiau esančiame kodo bloke pirmiausia išardykite el. pašto adresą ir slaptažodį iš req.body objektas. Tada patikrinkite, ar jūsų duomenų bazėje yra vartotojas. Jei vartotojo duomenų bazėje nėra, grįžtate su 401 būsenos kodu.

Tada, naudodami bcrypt palyginimo metodą, įveskite vartotojo pateiktą slaptažodį ir maišos slaptažodį, kurį gavote iš savo duomenų bazės. Palyginkite abu, kad patvirtintumėte, ar jie sutampa. Jei slaptažodžiai sutampa, grąžinate būsenos kodą 200 ir sėkmės pranešimą. Priešingu atveju pateikiate 401 būsenos kodą ir klaidos pranešimą.

Galiausiai importuokite maršrutizatorius į tavo app.js failą ir naudoti jį kaip programos lygio tarpinę programinę įrangą.

Tai užbaigia jūsų vartotojo autentifikavimo modelį; dabar vartotojai gali saugiai prisiregistruoti ir prisijungti prie jūsų programos.

Vartotojo autentifikavimo svarba

Vartotojo autentifikavimas užtikrina, kad tik teisėti vartotojai gali pasiekti jūsų programą. Jei jūsų duomenys kokiu nors būdu yra asmeniniai ar privatūs, turėtumėte imtis veiksmų, kad neautentifikuoti vartotojai negalėtų pasiekti prieigos.