Arendajana vastutate oma kasutajate andmete kaitsmise eest autentimise kaudu. Saate kasutada Passport.js-i kasutajate autentimiseks Node'i ja Postgresi rakenduses.

Alustuseks looge kasutajate registreerimiseks, sisse- ja väljalogimiseks lõpp-punktidega sõlmeserver. Saate lubada Passportil autentida, et piirata volitamata juurdepääsu teie rakendusele.

Kasutajate tabeli loomine

Kasutaja autentimiseks kasutate e-posti aadressi ja parooli. See tähendab, et kasutajate tabel peab sisaldama e-posti aadressi ja paroolivälja. Looge psql käsureal uus andmebaas nimega nodeapp:

LOOANDMEBAAS nodeapp;

Järgmisena looge kasutajate salvestamiseks tabel:

LOOTABELkasutajad (
ID INT LOODUD ALATI IDENTITEEDI ESMAVÕTMENA,
email CHAR(128),
parool CHAR(60)
);

See kood loob uue tabeli, mis sisaldab e-posti aadressi, parooli ja automaatselt loodud ID-välja.

Sõlmeserveri loomine

Node.js on serveripoolne JavaScripti käituskeskkond, mis võimaldab meil kiiresti HTTP-servereid luua. Serveri loomise protsessi ja erinevate HTTP-marsruutide lihtsustamiseks võite kasutada Express, Node.js veebiraamistik.

instagram viewer

Käivitage see käsk, et luua uus kaust nimega postgres-auth:

mkdir postgres-auth

Järgmisena lähtestage npm:

npm init -y

Lõpuks installige Express:

npm install express

Nüüd saate luua Node veebiserver.

Uues failis nimega index.js, lisage järgmine:

konst väljendada = nõuda("ekspress");
konst rakendus = express();
app.use (express.json());
app.use (express.urlencoded({ pikendatud: tõsi }));
app.listen(3000, () => konsool.log("Kuulamine pordis 3000"));

Selle koodi käivitamine käivitab serveri ja logib konsoolis järgmised andmed:

Kuulamine pordist 3000

Ühenduse loomine PostgreSQL-iga

To Ühendage PostgreSQL-iga kasutada sõlm-postgres. node-postgres on ühenduse draiver, mis pakub liidest Node'i ja Postgresi vahel.

Node-postrges installimiseks npm kaudu toimige järgmiselt:

npm install lk

Kui olete selle teegi installinud, looge uus fail nimega db.js ja ühendage see andmebaasiga:

konst { Klient } = nõuda("lk");
konst { kasutaja, host, andmebaas, parool, port} = nõuda("./dbConfig");

konst klient = uus Klient({
kasutaja,
võõrustaja,
andmebaas,
parool,
sadam,
});

client.connect();
moodul.exports = klient;

Node-postgresi kliendimeetod võtab selle andmebaasi üksikasjad, millega ühendate. See programm impordib oma ühenduse üksikasjad failist nimega dbConfig. Seetõttu looge see fail ja lisage sellele järgmine kood:

moodul.exports = {
kasutaja: "postgres",
host: "localhost",
andmebaas: "nodeapp",
parool: "teie parool",
port: 5432,
};

Looge andmebaasi abifunktsioonid

Andmebaasiga suhtlemiseks on alati hea tava kasutada üksikuid funktsioone. Need muudavad ühikutestide kirjutamise lihtsaks ja parandavad korduvkasutatavust. Registreerumise lõpp-punkti jaoks peate looma kaks funktsiooni:

  1. Kontrollimaks, kas e-kiri on juba registreeritud.
  2. Kasutaja loomiseks.

Eesmärk on registreerida kasutajad ainult siis, kui neid andmebaasis pole.

Looge uus fail nimega helper.js ja importige andmebaasi klient andmebaasist db.js:

konst klient = nõuda("./db.js")

Järgmisena lisage uus funktsioon nimega emailExists():

konst emailExists = asünkr (e-post) => {
konst andmed = ootama client.query("SELECT * FROM kasutajad WHERE email=$1", [
email,
]);

kui (data.rowCount == 0) tagasivale;
tagasi data.rows[0];
};

See funktsioon võtab meili ja kontrollib, kas see on juba kasutusel. See teeb seda SELECT-klausli abil, mis tagastab rea, mille meiliväli vastab registreeriva kasutaja esitatud väärtusele. Kui meili pole olemas, tagastab see vale.

Kasutajat loova funktsiooni loomiseks lisage faili helper.js funktsioon nimega createUser():

konst createUser = asünkr (e-post, parool) => {
konst sool = ootama bcrypt.genSalt(10);
konst räsi = ootama bcrypt.hash (parool, sool);

konst andmed = ootama client.query(
"INSERT INTO kasutajad (e-post, parool) VÄÄRTUSED ($1, $2) ID, e-posti aadress, parool TAGASTAMINE",
[e-post, räsi]
);

kui (data.rowCount == 0) tagasivale;
tagasi data.rows[0];
};

See funktsioon võtab meili ja parooli väärtused. See kasutab INSERT-klauslit, et luua nende üksikasjadega uus rea ja kui see õnnestub, tagastab vastloodud kasutaja. Pange tähele, et enne parooli salvestamist peaksite seda tegema räsi seda kasutades bcrypt. Kunagi pole hea mõte salvestada paroole lihttekstina. Kui häkkeritel on juurdepääs teie kasutajate andmebaasile, pääsevad nad hõlpsalt juurde tundlikule teabele.

Selle kasutamise alustamiseks installige bcryptjs:

npm installige bcryptjs

Importige failis helper.js bcryptjs:

konst bcrypt = nõuda("bcryptjs")

Bcryptjs'i kasutades salvestab andmebaas ainult krüptitud parooli. Seetõttu peate sisselogimisel võrdlema kasutaja antud lihtteksti parooli ja andmebaasi räsitud parooli. Selleks saate kasutada Bcryptjs'i pakutavat võrdlusmeetodit.

Looge funktsioon nimega matchPassword():

konst matchPassword = asünkr (parool, hashPassword) => {
konst vaste = ootama bcrypt.compare (parool, hashPassword);
tagasi vaste
};

See võtab vastu tavalise parooli ja räsi ning kasutab seejärel funktsiooni Bcrypt.compare(), et teha kindlaks, kas esitatud parool on õige. Kui on, tagastab see tõene, vastasel juhul tagastab see vale.

Need on kõik funktsioonid, mida me andmebaasiga suhtlemiseks kasutame. Kindlasti eksportige need kõik lõpus:

moodul.exports = { emailExists, createUser, matchPassword };

Passi konfigureerimine

Passport on sõlme autentimise vahevara, mis pakub üle 500 autentimisstrateegia, nagu sotsiaalne sisselogimine, JSON Web Tokens (JWT) ja e-posti autentimine. Kasutame viimast, mida pakub passi-kohalik strateegia.

Kasutage passi ja passi-kohaliku installimiseks järgmist käsku:

npm installi pass
npm install pass-local

Järgmisena konfigureerige Passport olemasolevate kasutajate sisselogimiseks ja uute kasutajate registreerimiseks.

Alustage uue faili loomisega passConfig.js. Seejärel importige Passporti kohalik strateegia ja äsja loodud andmebaasi abifunktsioonid:

konst LocalStrategy = nõuda("pass-kohalik");
konst { emailExists, createUser, matchPassword } = nõuda("./abistaja");

Kasutaja registreerimise seadistamiseks lisage samasse faili:

moodul.exports = (pass) => {
pass.use(
"kohalik registreerumine",
uus LocalStrategy(
{
kasutajanimiField: "email",
paroolField: "parool",
},
asünkr (e-post, parool, valmis) => {
proovige {
konst userExists = ootama emailExists (e-post)

kui (kasutaja on olemas) {
tagasi tehtud (null, vale);
}

konst kasutaja = ootama createUser (e-post, parool);
tagasi tehtud (null, kasutaja);
} püüda (viga) {
tehtud (viga);
}
}
)
);
}

Kuna pass-local eeldab kasutajanime ja parooli ning te kasutate meili, määrake kasutajanime välja e-kiri. Kasutaja või pigem selle rakenduse esiosa saadab meili ja parooli päringu kehasse. Siiski ei pea te väärtusi ise välja võtma, kuna Passport tegeleb sellega taustal.

See programm kontrollib esmalt, kas meil on juba võetud, kasutades helper.js funktsiooni emailExists(). Kui meili andmebaasis ei ole, loob see funktsiooni createUser() abil uue kasutaja. Lõpuks tagastab see kasutajaobjekti.

Kasutajate sisselogimiseks lisage faili passportConfig.js järgmine teave:

moodul.exports = (pass) => {
pass.use(
"kohalik registreerumine",
uus LocalStrategy(
// Registreeri
)
);
pass.use(
"kohalik sisselogimine",
uus LocalStrategy(
{
kasutajanimiField: "email",
paroolField: "parool",
},
asünkr (e-post, parool, valmis) => {
proovige {
konst kasutaja = ootama emailExists (e-post);
kui (!kasutaja) tagasi tehtud (null, vale);
konst isMatch = ootama matchPassword (parool, user.password);
kui (!isMatch) tagasi tehtud (null, vale);
tagasi tehtud (null, {id: kasutaja ID, meili: kasutaja.email});
} püüda (viga) {
tagasi tehtud (viga, vale);
}
}
)
);
};

Siin kontrollib programm esmalt, kas e-kiri on registreeritud. Kui ei, tagastab see vale. Kui ta meili leiab, võrdleb ta oma parooli päringus oleva parooliga. Kui paroolid ühtivad, logib see kasutaja sisse ja tagastab kasutajaobjekti.

Viimane samm on API lõpp-punktide loomine.

  • POSTITA /auth/signup
  • POSTITA /auth/login

Mõlemad lõpp-punktid saavad taotluse sisusse meili ja parooli. Need sisaldavad ka äsja konfigureeritud passi autentimise vahevara funktsioone.

Importige ja seadistage Passport uues failis nimega server.js:

konst pass = nõuda("pass");
nõuda(./passportConfig")(pass);

Seejärel lisage järgmised marsruudid:

app.post(
"/auth/Registreeri",
passport.authenticate("local-signup", { istungil: vale }),
(req, res, next) => {
res.json({
kasutaja: req.user,
});
}
);
app.post(
"/auth/Logi sisse",
passport.authenticate("local-login", { istungil: vale }),
(req, res, next) => {
res.json({ kasutaja: req.user });
}
);

Mõlemad marsruudid tagastavad edu korral kasutajat sisaldava JSON-objekti.

Kontrollige oma API-t ühikutestide abil

Passporti saate kasutada sõlmerakenduse autentimiseks PostgreSQL-i rakenduse abil. Lõite kasutajate registreerumiseks ja sisselogimiseks API lõpp-punktid.

Kuigi saate API toimimise testimiseks kasutada REST-kliente, nagu Postman, on ühikutestide kirjutamine palju lihtsam. Ühiktestid võimaldavad teil testida rakenduse üksikuid osi. Nii saate isegi siis, kui lõpp-punkt ebaõnnestub, täpselt kindlaks teha tõrkepunkti. Üks tööriistadest, mida saate Node'i rakenduste testimiseks kasutada, on Jest.