Kasutaja autentimine on teie rakendusele juurdepääsu püüdva kasutaja identiteedi kontrollimise protsess. See hõlmab kasutaja autentsuse kinnitamiseks mandaatide autoriseerimist ja edastamist.

Saate rakendada lihtsa kasutaja autentimismudeli rakenduses Node.js, kasutades Expressi, Bcrypti ja MongoDB-d, vaid mõne sammuga.

1. samm: arenduskeskkonna seadistamine

Esiteks looge projekti kaust ja cd sellesse käivitades:

mkdir kasutaja autentimine
cd kasutaja autentimine

Järgmisena lähtestage npm oma projektikataloogis, käivitades:

npm init -y

The -y lipp initsialiseerib npm ja loob teie package.json fail koos kõigi selle vaikeseadetega.

See kasutaja autentimismudel nõuab mõningaid sõltuvusi.

Nad sisaldavad:

  • Ekspress: Express on Node.js raamistik mis pakub veebi- ja mobiilirakenduste jaoks tugevat funktsioonide komplekti. See muudab Node.js-iga taustarakenduste loomise lihtsamaks.
  • Bcrypt: bcrypt on npm-pakett, mis rakendab bcrypt parooli räsifunktsiooni. See võimaldab teil luua tavalistest paroolistringidest räsi.
  • instagram viewer
  • Mongoose: Mongoose on MongoDB objektiandmete modelleerimise teek. See lihtsustab teie rakenduse ja MongoDB andmebaasi vahelist suhtlust.
  • dotenv: dotenv on nullsõltuvusega pakett, mis laadib keskkonnamuutujad alates a .env faili sisse protsess.env.
  • Validaator: validaator on pakett, mis sisaldab erinevaid stringi kontrollimise funktsioone.
  • Body-parser: kehaparseri pakett analüüsib vahevara päringu kehasid enne töötlejaid.

Installige paketid, käivitades:

npm installida express bcrypt mongoose dotenv validaator keha- parser

Järgmisena looge an app.js faili oma projekti juurkataloogi ja lisage põhilise Expressi serveri loomiseks allolev koodiplokk:

// app.js
konst väljendada = nõuda('ekspress');
konst rakendus = express();
konst bodyParser = nõuda("kehaparser");

konst port = 3000;

rakendus.kasutada(bodyParser.json());
rakendus.kasutage(bodyParser.urlencoded({ pikendatud: tõsi }));

app.listen (port, ()=>{
konsool.log(`Rakendus kuulab pordis ${port}`);
});

See kood loob kiirrakenduse eksemplari, kutsudes välja kiirfunktsiooni. Seejärel kasutab see kehaparser vahevara sissetulevate päringu kehade sõelumiseks. Seejärel hakkab see kuulama liiklust pordis 3000, kutsudes välja ekspresseksemplari kuulamismeetodi ja edastades argumendina pordimuutuja.

2. samm: rakenduse ühendamine andmebaasiga

Looge oma projekti juurkataloogis a .env faili ja salvestage sinna oma MongoDB mandaadid. See väldib teie andmebaasi mandaatide paljastamist koodis, mis võib anda pahatahtlikele kasutajatele juurdepääsu teie andmebaasile.

Järgmisena navigeerige oma app.js faili ja importige mangoose:

konst mangust = nõuda("mongoose");

Seejärel helistage importimisele dotenv ja helistage konfig meetod sellel:

nõua ("dotenv").config();

Helistades konfig meetod sisse lülitatud dotenv laadib keskkonnamuutujaid protsess.env.

Lõpuks lülitage sisse ühendusmeetod mangust ja edastage argumendina oma MongoDB URI:

mongoose.connect (process.env. MONGODB_URI).then(() => {
console.log('Andmebaasiga ühendamine õnnestus')
})

3. samm: kasutajamudeli loomine

Looge oma projekti juurkataloogis "mudelid” kaust; siin hoiate oma mongoose mudelit:

mkdir mudelid

Järgmisena looge "kasutajamudel” faili ja lisage järgmised impordid:

konst mangust = nõuda("mongoose")
konst { isEmail } = nõuda('validaator')

isEmail on valideerimisfunktsioon, mis tagastab tõsi kui antud string on meil. Vajate seda oma kasutajamudelile mongoose valideerimise rakendamiseks.

Järgmisena lisage omale järgmine kood kasutajamudel fail:

// mudelid/kasutajaModel
konst userSchema = mangust. Skeem({
email: {
tüüp: String,
nõutav: [tõsi, 'E-post on kohustuslik'],
kinnita: {
valideerija: isEmail,
sõnum: rekvisiidid => `${props.value} ei ole kehtiv e-post".
}
},

parool: {
tüüp: String,
nõutav: [tõsi, 'Parool on nõutav'],
kinnita: {
validaator: funktsiooni (väärtus) {
tagasi väärtus.pikkus >= 6
},
sõnum: () =>'Parool peab olema vähemalt kuue tähemärgi pikkune'
}
}
})

moodul.eksporti = mongoose.model('Kasutaja', kasutajaskeem)

Ülaltoodud kood loob a kasutajaskeem muutuja, mis salvestab väärtuse mangust. Skeem meetod. Mangust. Skeemimeetod kaardistab atribuudid MongoDB koguga ja määrab selles sisalduvate dokumentide kuju. Mongoose skeemil on kaks omadust - an email ja a parool— mis on teie autentimisnõuded.

Meiliatribuut on stringitüüp ja sellel on nõutud seatud tõeseks. Kui päringu sisu ei sisalda tõrketeadet „E-posti aadress on nõutav”, kuvatakse email vara. Lõpuks, kasutades mongoose kohandatud valideerimist, validaator vara referens the isEmail funktsiooni. See funktsioon tagastab tõese või vale, olenevalt stringi kehtivusest meilisõnumina. Seejärel võtab sõnumi atribuut meili väärtuse (rekvisiidid) ja koostab sisuka veateate.

Parooli atribuut on nõutav stringitüüp, mille tõrketeade on järgmine: "Parool on nõutav". The validaator Funktsioon on anonüümne, mis tagastab tõese, kui parool on vähemalt kuue tähemärgi pikkune.

Viimane rida loob ja ekspordib mongoose mudeli, helistades mudel meetod sisse lülitatud mangust. Edastage mudeli nimi (Kasutaja) esimese argumendina ja skeemina (kasutajaskeem) teise argumendina.

4. samm: sisse- ja registreerumismarsruutide rakendamine

Looge oma projekti juurkataloogis a marsruute kaust:

mkdir marsruudid

Looge marsruutide kaustas a userRoutes.js fail ja lisage järgmised impordid:

// routes/userRoutes.js
konst väljendada = nõuda("ekspress");
konst Kasutaja = nõuda(../models/userModel");
konst bcrypt = nõuda("bcrypt");

Looge Express Routeri eksemplar, helistades Ruuter meetod sisse lülitatud väljendada:

konst ruuter = ekspress. Ruuter ();

Järgmisena looge oma registreerumismarsruut, lisades omale alloleva koodiploki userRoute.js fail:

ruuter.post("/sign-up", asünkroon (req, res) => {
proovi {
// Ekstraheerige e-posti aadress ja parool objektist req.body
konst { email, password } = req.body;

// Kontrollimakui meili on juba sissekasutada
lase userExists = ootama User.findOne({ email });

if (kasutaja eksisteerib) {
res.status(401).json({ sõnum: "E-post on juba sisestatud kasutada.&tsitaat; });
tagasi;
}

// Soolaringide defineerimine
konst soolRingid = 10;

// Räsiparool
bcrypt.hash (parool, saltRounds, (err, hash) => {
kui (viga) viskamauusViga("Siseserver Viga");

// Loo a uuskasutaja
lase kasutaja = uus Kasutaja({
email,
parool: räsi,
});

// Salvesta kasutaja andmebaasi
kasutaja.salvesta().then(() => {
res.json({ sõnum: "Kasutaja loomine õnnestus", kasutaja });
});
});
} püüda (err) {
tagasires.status(401).saada(eks.sõnum);
}
});

Ülaltoodud koodiplokis destruktureerisite esmalt e-posti aadressi ja parooli req.body objektiks. Seejärel kontrollige, kas kasutaja juba kasutab meili, kuna see peaks olema iga kasutaja jaoks kordumatu. Kui meili on juba kasutatud, tagastate ja peatate koodi täitmise olekukoodiga 401.

Lihtsate paroolide hoidmine andmebaasis on suur turvaoht, kuna pahatahtlikud häkkerid võivad andmebaasile juurdepääsu saada. Peaksite paroolid enne nende andmebaasi sorteerimist räsi tegema, nii et isegi kui häkker need avastab, ei tohiks see kasutajaid ohustada. Räsimine on antud “võtme” teiseks väärtuseks teisendamine. Räsimine on ühesuunaline funktsioon, mis tähendab, et erinevalt krüptimisest ei saa te räsitud väärtusest algset väärtust hankida.

Bcrypti kasutades räsisite oma kasutaja parooli, kutsudes välja bcrypti räsimeetodi. Räsimeetodil on kolm parameetrit: räsitav string, soolaringid ja tagasihelistamise funktsioon. Edastate kasutaja parooli, varem loodud muutuja saltRounds ja tagasihelistamise.

Soolaringid viitavad ühe krüpti räsi arvutamiseks kuluvale ajale. Mida kõrgemad on soolaringid, seda rohkem on räsiringe.

Kui räsimeetod annab tõrke, viskate välja "serveri sisemise vea". Vastasel juhul määrate parooli atribuudiks eduka räsi ja salvestate selle oma andmebaasi, kutsudes välja salvestusmeetodi Kasutaja näiteks.

Järgmisena looge sisselogimismarsruut, lisades omale alloleva koodiploki userRoute.js fail:

ruuter.post("/sign-in", asünkroon (req, res) => {
proovi {
// Ekstraheerige e-posti aadress ja parool objektist req.body
konst { email, password } = req.body;

// Kontrollimakuikasutajaon olemassisseandmebaasi
lase kasutaja = ootama User.findOne({ email });

if (!kasutaja) {
return res.status (401).json({ sõnum: "Kehtetud mandaadid" });
}

// Võrdle paroole
bcrypt.compare (parool, user.password, (err, result) => {
if (tulemus) {
return res.status (200).json({ sõnum: "Kasutaja logis edukalt sisse" });
}

konsool.log (err);
return res.status (401).json({ sõnum: "Kehtetud mandaadid" });
});
} püüda (viga) {
res.status(401).saada(eks.sõnum);
}
});

moodul.eksporti = ruuter;

Ülaltoodud koodiplokis destruktureerite esmalt e-posti aadressi ja parooli req.body objektiks. Seejärel kontrollite, kas teie andmebaasis on kasutaja. Kui kasutajat teie andmebaasis pole, naasete olekukoodiga 401.

Seejärel sisestage bcrypti võrdlemise meetodil kasutaja antud parool ja andmebaasist hangitud räsiparool. Võrrelge neid kahte, et kinnitada, kas need sobivad. Kui paroolid ühtivad, tagastate olekukoodi 200 ja eduteate. Vastasel juhul tagastate olekukoodi 401 ja veateate.

Lõpuks importige ruuter sinu sisse app.js faili ja kasutada seda rakendustaseme vahevarana.

See lõpetab teie kasutaja autentimismudeli; nüüd saavad kasutajad turvaliselt registreeruda ja teie rakendusse sisse logida.

Kasutaja autentimise tähtsus

Kasutaja autentimine tagab, et teie rakendusele pääsevad juurde ainult seaduslikud kasutajad. Kui teie andmed on mingil moel isiklikud või privaatsed, peaksite võtma meetmeid, et takistada autentimata kasutajatel juurdepääsu.