Formulare înregistrare și autentificare utilizatori

1. Configurarea fișierului index.html pentru formularele TailwindCSS

Pentru a utiliza componentele TailwindCSS, cum ar fi formularele de sign in, este recomandat să aplicăm câteva ajustări în fișierul index.html:

  1. Clasa h-full pe <html> și <body>

    • Asigură ca înălțimea paginii să ocupe întreg viewport-ul, necesar pentru centrare verticală a componentelor de tip formular.

  2. Fundal global (bg-gray-900) pe <html>

    • Setează o culoare de fundal uniformă pentru întreaga pagină, conform design-ului Tailwind.

  3. Div-ul root (<div id="root"></div>)

    • Punctul de montare al aplicației React; toate componentele React vor fi redate în acest element.

  4. Scriptul principal (main.jsx)

    • Încarcă aplicația React în div-ul root, permițând utilizarea TailwindCSS și a componentelor sale în aplicație.

2. Crearea API-uri pentru înregistrare și autentificare

2.1. Înregistrarea utilizatorilor

Fișierul user.routes.js definește funcțiile pentru interacțiunea cu endpoint-urile publice legate de utilizatori.

circle-info

Explicație tehnică:

  • Folosește instanța axiosNoAuth deoarece înregistrarea nu necesită token.

  • Trimite un POST către /users cu datele din formular (name, email, password).

  • Returnează datele răspunsului sau eroarea primită de la API.

  • Este compatibilă cu componentele Register.jsx pentru fluxul de înregistrare.

2.2. Autentificarea utilizatorilor

Fișierul auth.routes.js definește funcția pentru login:

circle-info

Explicație tehnică:

  • Folosește tot axiosNoAuth deoarece autentificarea inițială nu necesită token.

  • Trimite un POST către /auth/login cu obiectul credentials (email, password).

  • Returnează datele răspunsului sau eroarea API-ului.

  • Funcția poate fi integrată în componenta Login.jsx pentru autentificarea utilizatorului.

3. Formularul de înregistrare utilizator cu TailwindCSS

Componenta Register reprezintă formularul de înregistrare al utilizatorilor, implementat cu React, stilizat cu TailwindCSS, și integrat cu API-ul backend.

Principalele caracteristici:

  • Gestionarea stării formularului

    • useState pentru câmpurile email și password.

    • Input-uri controlate prin value + onChange.

  • Tratarea evenimentului submit

    • handleSubmit previne comportamentul default al browser-ului.

    • Apelează funcția loginUser din auth.routes pentru a trimite datele către API.

  • Stocarea token-ului

    • La succes, token-ul JWT primit de la API este salvat:

      • În Redux store (setToken).

      • În localStorage, pentru persistenta între sesiuni.

  • Feedback vizual cu notificări

    • toast.success pentru login reușit.

    • toast.error pentru erori sau date incorecte.

  • Navigare automată după login

    • După succes, utilizatorul este redirecționat către pagina principală (/) cu un mic delay (setTimeout).

    • Navigarea este realizată cu useNavigate din React Router.

  • Design responsive și accesibil

    • Layout centrat vertical și orizontal (flex, min-h-full, justify-center).

    • Input-uri și butoane cu hover și focus states consistente.

    • Legătura către pagina de înregistrare cu <Link> din React Router pentru SPA navigation.

circle-info

Aspecte tehnice importante

  • Integrare API: registerUser(formData) trebuie să returneze un obiect { success: boolean, message?: string, data: objcet }.

  • Navigare: useNavigate permite SPA navigation fără reload.

  • Notificări: sonner furnizează feedback instant, îmbunătățind UX-ul.

  • TailwindCSS: simplifică stilizarea și păstrează consistența UI-ului.

Pagina de înregistrare a unui nou utilizator

4. Formularul de autentificare utilizator cu TailwindCSS

Componenta Login reprezintă un formular de autentificare, implementat cu React și stilizat cu TailwindCSS. Aceasta gestionează valorile câmpurilor cu useState și permite navigarea internă între pagini folosind React Router (<Link>).

Caracteristici principale:

  • Gestionarea stării formularului cu useState pentru câmpurile email și password.

  • Tratarea evenimentului submit prin handleSubmit pentru prevenirea reload-ului și procesarea datelor (ex.: apel API pentru login).

  • Navigare internă: <Link to="/register"> permite trecerea la pagina de înregistrare fără reîncărcarea întregii aplicații (SPA).

  • Design modern și responsive folosind TailwindCSS:

    • Input-uri cu focus vizibil și fundal semi-transparent (bg-white/5)

    • Buton de submit cu hover și focus states vizibile (bg-indigo-500, hover:bg-indigo-400, focus-visible:outline-indigo-500)

    • Layout centrat vertical și orizontal cu Flexbox (flex, justify-center, min-h-full)

circle-info

Aspecte tehnice cheie în Login.jsx

  • Integrare API: loginUser(formData) trebuie să returneze un obiect { success: boolean, data?: string, message?: string, data: object }.

  • Redux: setToken actualizează starea globală, astfel încât token-ul poate fi folosit ulterior pentru cereri autentificate.

  • Toast notifications: oferă feedback instant și îmbunătățește UX-ul.

  • TailwindCSS: simplifică stilizarea și păstrează consistența UI-ului.

  • SPA navigation: useNavigate permite redirecționarea fără refresh al paginii.

Pagina de autentificare

5. Actualizare router

După ce am creat pagina de înregistrare și autentificare, este nevoie să le facem vizibile către restul aplicației.

Așadar, mergem în fișierul router.jsx și adăugăm rutele pentru înregistrare și autentificare:

Last updated