Käyttäjän todennus on prosessi, jolla varmistetaan käyttäjän henkilöllisyys, joka yrittää päästä sovellukseesi. Se sisältää valtuutuksen ja valtuustietojen siirtämisen käyttäjän aitouden vahvistamiseksi.

Voit toteuttaa yksinkertaisen käyttäjän todennusmallin Node.js: ssä Expressin, Bcryptin ja MongoDB: n avulla vain muutamassa vaiheessa.

Vaihe 1: Kehitysympäristön määrittäminen

Luo ensin projektikansio ja CD siihen juoksemalla:

mkdir käyttäjän todennus
CD käyttäjän todennus

Alusta seuraavaksi npm projektihakemistossasi suorittamalla:

npm init -y

The -y lippu alustaa npm: n ja luo sinun package.json tiedosto kaikilla sen oletusasetuksella.

Tämä käyttäjän todennusmalli vaatii muutaman riippuvuuden.

Ne sisältävät:

  • Ilmaista: Express on Node.js-kehys joka tarjoaa vankan joukon ominaisuuksia verkko- ja mobiilisovelluksiin. Se helpottaa taustasovellusten rakentamista Node.js: n avulla.
  • Bcrypt: bcrypt on npm-paketti, joka toteuttaa bcrypt-salasanan hajautustoiminnon. Sen avulla voit luoda tiivisteitä tavallisista salasanamerkkijonoista.
  • instagram viewer
  • Mongoose: Mongoose on MongoDB-objektitietojen mallinnuskirjasto. Se yksinkertaistaa vuorovaikutusta sovelluksesi ja MongoDB-tietokannan välillä.
  • dotenv: dotenv on nollariippuvuuspaketti, joka lataa ympäristömuuttujat tiedostosta a .env tiedosto sisään process.env.
  • Validator: validaattori on paketti, joka sisältää erilaisia ​​merkkijonojen vahvistustoimintoja.
  • Body-parser: body-parser-paketti jäsentää pyyntökappaleet väliohjelmistossa ennen käsittelijöitäsi.

Asenna paketit suorittamalla:

npm Asentaa express bcrypt mongoose dotenv validaattori kehon- jäsentäjä

Luo seuraavaksi an app.js tiedosto projektisi juurihakemistoon ja lisää alla oleva koodilohko luodaksesi perus Express-palvelimen:

// app.js
konst express = vaatia('ilmaista');
konst sovellus = express();
konst bodyParser = vaatia("body-jäsennin");

konst portti = 3000;

sovellus.käyttää(bodyParser.json());
sovellus.käyttää(bodyParser.urlencoded({ laajennettu: totta }));

app.listen (portti, ()=>{
konsoli.Hirsi(`Sovellus kuuntelee porttia ${port}`);
});

Tämä koodi luo pikasovelluksen esiintymän kutsumalla pikafunktiota. Sitten se käyttää kehon jäsentäjä väliohjelmisto saapuvien pyyntöjen runkojen jäsentämiseksi. Sitten se alkaa kuunnella liikennettä portissa 3000 kutsumalla pikailmentymän kuuntelumenetelmää ja välittämällä portin muuttujan argumenttina.

Vaihe 2: Sovelluksen yhdistäminen tietokantaan

Luo projektisi juurihakemistoon a .env tiedosto ja tallenna MongoDB-tunnistetietosi siihen. Näin vältytään paljastamasta tietokannan tunnistetietoja koodissa, joka voi antaa haitallisille käyttäjille pääsyn tietokantaasi.

Siirry seuraavaksi omaan app.js tiedosto ja tuo mangoose:

konst mangusti = vaatia("mungo");

Soita sitten tuontiin dotenv ja soita config menetelmä siinä:

vaatia("dotenv").config();

Soittamalla config menetelmä päällä dotenv lataa ympäristömuuttujia process.env.

Ota lopuksi yhteysmenetelmä käyttöön mungo ja välitä MongoDB URI argumenttina:

mongoose.connect (process.env. MONGODB_URI).hen(() => {
console.log('Yhdistetty tietokantaan onnistuneesti')
})

Vaihe 3: Käyttäjämallin luominen

Luo projektisi juurihakemistoon "mallit”kansio; tässä säilytät mongoose-mallisi:

mkdir mallit

Luo seuraavaksi "käyttäjämalli”-tiedosto ja lisää seuraavat tuonnit:

konst mangusti = vaatia('mungo')
konst { isEmail } = vaatia('validaattori')

isEmail on vahvistusfunktio, joka palauttaa totta jos annettu merkkijono on sähköposti. Tarvitset sitä käyttääksesi mongoose-validointia käyttäjämalliisi.

Lisää seuraavaksi seuraava koodi omaan käyttäjämalli tiedosto:

// mallit/käyttäjämalli
konst userSchema = mangoose. Schema({
sähköposti: {
tyyppi: merkkijono,
vaaditaan: [tosi, 'Sähköposti vaaditaan'],
vahvista: {
validaattori: isEmail,
viesti: rekvisiitta => `${props.value} ei ole kelvollinen sähköposti".
}
},

Salasana: {
tyyppi: merkkijono,
vaaditaan: [tosi, 'salasana tarvitaan'],
vahvista: {
validaattori: toiminto (arvo) {
palata arvo.pituus >= 6
},
viesti: () =>'Salasanan tulee olla vähintään kuusi merkkiä pitkä'
}
}
})

moduuli.vientiä = mongoose.model('User', userSchema)

Yllä oleva koodi luo a userSchema muuttuja, joka tallentaa arvon mungo. Kaavio menetelmä. Mangoose. Schema-menetelmä kartoittaa ominaisuudet MongoDB-kokoelmaan ja määrittää siinä olevien asiakirjojen muodon. Mongoose-skeemalla on kaksi ominaisuutta - an sähköposti ja a Salasana– mikä on todennusvaatimustasi.

Sähköpostiominaisuus on merkkijonotyyppi ja siinä on vaaditaan asetettu todeksi. Mukana oleva virhesanoma "Sähköposti vaaditaan" tulee näkyviin, jos pyynnön runko ei sisällä sähköposti omaisuutta. Lopuksi käyttämällä mongoose-mukautettua validointia validaattori omaisuuden referens isEmail toiminto. Tämä funktio palauttaa tosi tai epätosi sen perusteella, onko merkkijono kelvollinen sähköpostina. Sitten viestin ominaisuus ottaa sähköpostin arvon (rekvisiitta) ja muodostaa merkityksellisen virheilmoituksen.

Salasana-ominaisuus on pakollinen merkkijonotyyppi, jossa on virheilmoitus "Salasana vaaditaan". The validaattori funktio on anonyymi, joka palauttaa tosi, jos salasana on vähintään kuusi merkkiä pitkä.

Viimeinen rivi luo ja vie mongoose-mallin kutsumalla malli- menetelmä päällä mungo. Anna mallin nimi (Käyttäjä) ensimmäisenä argumenttina ja skeemana (userSchema) toisena argumenttina.

Vaihe 4: Kirjautumis- ja kirjautumisreittien käyttöönotto

Luo projektisi juurihakemistoon a reitit kansio:

mkdir-reitit

Luo reitit-kansioosi a userRoutes.js tiedosto ja lisää seuraavat tuonnit:

// routes/userRoutes.js
konst express = vaatia("ilmaista");
konst Käyttäjä = vaatia(../models/userModel");
konst bcrypt = vaatia("bcrypt");

Luo Express Router -esiintymä soittamalla Reititin menetelmä päällä ilmaista:

konst reititin = express. Reititin();

Luo seuraavaksi kirjautumisreittisi lisäämällä alla oleva koodilohko userRoute.js tiedosto:

router.post("/sign-up", async (req, res) => {
yrittää {
// Poimi sähköposti ja salasana req.body-objektista
konst { sähköposti, salasana } = req.body;

// Tarkistaajos sähköposti On jo sisäänkäyttää
päästää userExists = odottaa User.findOne({ sähköposti });

if (userExists) {
res.status(401).json({ viesti: "Sähköposti on jo käyttää.&lainaus; });
palata;
}

// Määrittele suolakierrokset
konst suolaPyöreät = 10;

// Hash-salasana
bcrypt.hash (salasana, saltRounds, (err, hash) => {
jos (err) heittääUusiVirhe("Sisäinen palvelin Virhe");

// Luoda a Uusikäyttäjä
päästää käyttäjä = Uusi User({
sähköposti,
Salasana: hash,
});

// Tallenna käyttäjä tietokantaan
user.save().then(() => {
res.json({ viesti: "Käyttäjän luominen onnistui", käyttäjä });
});
});
} ottaa kiinni (err) {
palatares.Tila(401).lähettää(err.viesti);
}
});

Yllä olevassa koodikentässä purit ensin sähköpostin ja salasanan rakenteen req.body esine. Tarkista sitten, käyttääkö käyttäjä jo sähköpostia, koska sen pitäisi olla yksilöllinen jokaiselle käyttäjälle. Jos sähköposti on jo käytetty, palautat ja lopetat koodin suorittamisen tilakoodilla 401.

Pelkkien salasanojen tallentaminen tietokantaan on valtava turvallisuusuhka, koska haitalliset hakkerit voivat päästä tietokantaan. Sinun tulee tiivistää salasanat ennen niiden lisäämistä tietokantaan, joten vaikka hakkeri löytäisi ne, käyttäjille ei pitäisi aiheutua riskiä. Hashing on prosessi, jossa tietty "avain" muunnetaan toiseksi arvoksi. Hashing on yksisuuntainen toiminto, mikä tarkoittaa, että et voi hakea alkuperäistä arvoa hajautetusta arvosta, toisin kuin salaus.

Bcryptia käyttämällä tiivistit käyttäjän salasanasi kutsumalla hash-menetelmää bcryptissä. Hajautusmenetelmässä on kolme parametria: tiivistettävä merkkijono, suolakierrokset ja takaisinsoittotoiminto. Välität käyttäjän salasanan, aiemmin luomasi saltRounds-muuttujan ja takaisinsoittopyynnön.

Suolakierrokset tarkoittavat aikaa, joka tarvitaan yhden bcrypt-hajautusarvon laskemiseen. Mitä korkeammat suolakierrokset, sitä enemmän hajautuskierroksia.

Jos hash-menetelmä antaa virheen, annat "sisäisen palvelimen virheen". Muutoin asetat salasanaominaisuuden onnistuneeseen hajautusarvoon ja tallennat sen tietokantaasi kutsumalla tallennusmenetelmää Käyttäjä ilmentymä.

Luo seuraavaksi kirjautumisreittisi lisäämällä alla oleva koodilohko userRoute.js tiedosto:

router.post("/sign-in", async (req, res) => {
yrittää {
// Poimi sähköposti ja salasana req.body-objektista
konst { sähköposti, salasana } = req.body;

// Tarkistaajoskäyttäjäolemassasisääntietokanta
päästää käyttäjä = odottaa User.findOne({ sähköposti });

if (!user) {
return res.status (401).json({ viesti: "Virheelliset tunnistetiedot" });
}

// Vertaa salasanoja
bcrypt.compare (salasana, käyttäjä.salasana, (err, tulos) => {
if (tulos) {
return res.status (200).json({ viesti: "Käyttäjä kirjautui sisään onnistuneesti" });
}

konsoli.log (err);
return res.status (401).json({ viesti: "Virheelliset tunnistetiedot" });
});
} ottaa kiinni (virhe) {
res.Tila(401).lähettää(err.viesti);
}
});

moduuli.vientiä = reititin;

Yllä olevassa koodikentässä purat ensin sähköpostin ja salasanan rakenteen req.body esine. Sitten tarkistat, onko tietokannassasi käyttäjää. Jos käyttäjää ei ole tietokannassasi, palaat tilakoodilla 401.

Anna seuraavaksi bcrypt-vertailumenetelmää käyttäen käyttäjän antama salasana ja tietokannasta haettu hajautettu salasana. Vertaa näitä kahta varmistaaksesi, täsmäävätkö ne. Jos salasanat täsmäävät, palautat 200 tilakoodin ja onnistumisviestin. Muussa tapauksessa palautat 401-tilakoodin ja virheilmoituksen.

Lopuksi tuonti reititin sinun app.js tiedosto ja käytä sitä sovellustason väliohjelmistona.

Tämä täydentää käyttäjän todennusmallin. nyt käyttäjät voivat rekisteröityä turvallisesti ja kirjautua sisään sovellukseesi.

Käyttäjän todennuksen merkitys

Käyttäjien todennus varmistaa, että vain lailliset käyttäjät voivat päästä sovellukseesi. Jos tietosi ovat millään tavalla henkilökohtaisia ​​tai yksityisiä, sinun tulee ryhtyä toimiin estääksesi todentamattomien käyttäjien pääsyn niihin.