Przegląd
Aplikacja obsługuje dwie metody logowania:
- E-mail / hasło — z weryfikacją adresu e-mail
- Google OAuth — logowanie jednym kliknięciem
Autentykacja oparta jest na bibliotece Better Auth z sesjami cookie (7 dni, odświeżanie co 24h).
Logowanie (/login)
| Pole | Walidacja |
|---|
| E-mail | Wymagane, poprawny format e-mail |
| Hasło | Wymagane, min. 8 znaków |
Zachowanie
- Użytkownik wypełnia formularz i klika Zaloguj się.
- Jeśli dane poprawne → przekierowanie do
/dashboard/default.
- Jeśli e-mail nie jest zweryfikowany → wyświetlany jest komunikat o konieczności weryfikacji.
- Błędne dane → toast z komunikatem błędu.
OAuth
- Przycisk Zaloguj się przez Google uruchamia flow Google OAuth.
- Po sukcesie → przekierowanie do
/dashboard/default.
Linki nawigacyjne
- „Nie pamiętasz hasła?" →
/forgot-password
- „Zarejestruj się" →
/register
Rejestracja (/register)
| Pole | Walidacja |
|---|
| Imię | Wymagane |
| Nazwisko | Wymagane |
| E-mail | Wymagane, poprawny format e-mail |
| Hasło | Wymagane, min. 8 znaków |
| Powtórz hasło | Musi być identyczne z hasłem |
Zachowanie
- Użytkownik wypełnia formularz i klika Zarejestruj się.
- Konto zostaje utworzone z rolą
client (domyślna).
- E-mail weryfikacyjny jest wysyłany automatycznie (szablon Brevo).
- Użytkownik widzi komunikat o konieczności potwierdzenia e-maila.
- Po kliknięciu linku w e-mailu → konto aktywne, automatyczne zalogowanie.
Zaproszenia
Rejestracja może być powiązana z zaproszeniem (parametr ?invitation=TOKEN). Po ukończeniu onboardingu zaproszenie automatycznie oznaczane jest jako zaakceptowane.
Odzyskiwanie hasła (/forgot-password)
| Pole | Walidacja |
|---|
| E-mail | Wymagane, poprawny format e-mail |
Zachowanie
- Użytkownik podaje e-mail i klika Wyślij instrukcje.
- System wysyła e-mail z linkiem resetującym (szablon Brevo).
- Toast potwierdza wysłanie instrukcji.
Resetowanie hasła (/reset-password?token=TOKEN)
Wymagania
- Parametr
token w URL (z linku w e-mailu).
- Bez tokenu → wyświetlany komunikat „Nieprawidłowy link resetowania hasła".
| Pole | Walidacja |
|---|
| Nowe hasło | Wymagane, min. 8 znaków |
| Powtórz hasło | Musi być identyczne z nowym hasłem |
Zachowanie
- Użytkownik ustawia nowe hasło i klika Zresetuj hasło.
- Po sukcesie → przekierowanie do
/login z komunikatem „hasło zostało zmienione".
Sesje i middleware
- Sesje przechowywane w cookie
better-auth.session_token (lub __Secure- w HTTPS).
- Middleware (
middleware.ts) kontroluje dostęp:
- Trasy gościa (
/login, /register, /forgot-password, /reset-password): zalogowani użytkownicy → redirect do /dashboard/default.
- Trasy chronione (
/dashboard/*): niezalogowani → redirect do /login.
- Trasy publiczne (
/api/auth/*): dostępne bez uwierzytelnienia.
Zmienne środowiskowe
| Zmienna | Opis |
|---|
BETTER_AUTH_URL | Bazowy URL aplikacji |
BETTER_AUTH_SECRET | Sekret do szyfrowania sesji |
GOOGLE_CLIENT_ID | Client ID OAuth Google |
GOOGLE_CLIENT_SECRET | Client Secret OAuth Google |
BREVO_API_KEY | Klucz API Brevo (wysyłka e-mail) |
BREVO_FROM_EMAIL | Adres nadawcy e-mail |
BREVO_FROM_NAME | Nazwa nadawcy e-mail |
BREVO_TEMPLATE_VERIFICATION | ID szablonu weryfikacji |
BREVO_TEMPLATE_RESET_PASSWORD | ID szablonu resetu hasła |
BREVO_TEMPLATE_WELCOME | ID szablonu powitalnego |