Autentificare și autorizare utilizatori
JWT + Bcrypt
Generare folderului pentru rute
În cadrul folderului server, creăm folderul routes care va conține rutele pentru toate modelele pe care urmează să le creăm.
Ne apucăm să generăm ruta de autentificare pentru utilizatori prin crearea fisierului auth.routes.js în cadrul folderului routes.
Structură fișiere:
server/ ├── database/ │ └── models/ │ ├── User.js │ └── index.js ├── routes/ │ └── auth.routes.js ├── .env ├── .gitignore ├── package.json ├── package-lock.json ├── server.js └── index.js
Adăugarea unei chei de enviroment pentru generarea token-ului
În procesul de autentificare cu JWT, cheia de environment TOKEN_SECRET joacă un rol esențial în securitatea aplicației.
TOKEN_SECRET este o cheie secretă folosită de librăria jsonwebtoken pentru crearea și verificarea token-urilor JWT.
Când generezi un JWT (
jwt.sign()),TOKEN_SECRETeste folosit pentru a semna token-ul, astfel încât să nu poată fi falsificat.Când verifici un JWT (
jwt.verify()), aceeași cheie este folosită pentru a confirma că token-ul nu a fost modificat și este autentic.Este important ca
TOKEN_SECRETsă fie unic și păstrat secret, de obicei stocat în fișierul.envși nu trebuie să fie pus în codul sursă sau în Git.
Astfel, mergem în fișierul .env si adăugăm noua cheie .env:
PORT=3000
TOKEN_SECRET=my_jwt_secret_keyGenerarea rutei de autentificare
În cadrul fișierului auth.routes.js, începem prin importarea librăriilor de care vom avea nevoie și a modelului de utilizator.
Un Promise în JavaScript este un obiect care reprezintă o operațiune asincronă care se va finaliza în viitor și care poate avea una dintre cele trei stări:
Pending (în așteptare) – operațiunea nu s-a terminat încă.
Fulfilled (îndeplinit) – operațiunea s-a terminat cu succes și are un rezultat disponibil.
Rejected (respins) – operațiunea s-a terminat cu eroare și oferă un motiv (error).
Explicații privind logica fișierul auth.routes.js și a rutei de autentificare:
Crearea router-ului Express – Se importă
expressși se creează unrouterpentru a defini rutele legate de autentificare.Importuri importante – Se aduc
bcryptpentru verificarea parolelor criptate,jsonwebtoken(JWT) pentru generarea token-urilor și modelulUserdin baza de date.Ruta POST
/login– Aceasta primește datele de autentificare (emailșipassword) de la client.Verificarea existenței utilizatorului – Se caută în baza de date un utilizator cu email-ul dat. Dacă nu există, se răspunde cu eroare 400.
Verificarea parolei – Se compară parola introdusă cu cea stocată în baza de date folosind
bcrypt.compareSync. Dacă nu corespund, se trimite eroare 400.Generarea token-ului JWT – Dacă email-ul și parola sunt corecte, se generează un JWT care include
idșiroleale utilizatorului, care expiră într-o oră.Răspuns către client – Se trimite token-ul în format JSON pentru a fi folosit ulterior la autentificarea în aplicație.
Implementare rută autentificată la nivel de server
Ca ruta de autentificare să poată fi folosită, este nevoie să asigurăm că serverul are la cunoștință existența acestei rute.
Așadar, mergem în fisierul index.js din folderul server, unde adăugăm importul router-ului de auth și middlware-ul de rutare către rutele de autentificare (putem șterge importul modelului de utilizator).
Middleware-ul de rutare (route middleware):
Atașează router-ul
authRoutesla ruta de bază/auth.
Practic, toate rutele definite în authRoutes vor fi prefixate automat cu /auth.
De exemplu, ruta
router.post('/login', ...)dinauth.routes.jsva fi accesibilă la/auth/login.Este modul standard în Express de a organiza rutele pe module și de a „monta” routere în aplicație.
Last updated