# DataFirefly Magic Link: logowanie bez hasła

> Prezentacja DataFirefly Magic Link dodaje do Twojego sklepu PrestaShop 1.7, 8 lub 9 logowanie bez hasła. Klient wpisuje adres e-mail na stronie logowania, otrzymuje bezpieczny link jednorazowego użytku, klika, potwierdza…

- Strona: <https://www.datafirefly.com/pl/documentation/dfmagiclink/>
- Język: pl
- Zaktualizowano: 2026-10-29
- Inne języki: [fr](https://www.datafirefly.com/documentation/dfmagiclink/index.md), [en](https://www.datafirefly.com/en/documentation/dfmagiclink/index.md), [es](https://www.datafirefly.com/es/documentation/dfmagiclink/index.md), [de](https://www.datafirefly.com/de/documentation/dfmagiclink/index.md), [it](https://www.datafirefly.com/it/documentation/dfmagiclink/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfmagiclink/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfmagiclink/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

## Prezentacja

DataFirefly Magic Link dodaje do Twojego sklepu PrestaShop 1.7, 8 lub 9 logowanie bez hasła. Klient wpisuje adres e-mail na stronie logowania, otrzymuje bezpieczny link jednorazowego użytku, klika, potwierdza i jest zalogowany. Klasyczny formularz z loginem i hasłem pozostaje dostępny: magic link go uzupełnia, a nie zastępuje.

Moduł jest w pełni samodzielny: żadnych zależności Composera, żadnej usługi zewnętrznej, żadnych wywołań CDN. Wszystko działa na natywnym systemie e-maili PrestaShop.

## Wymagania

- PrestaShop 1.7.0 do 9.x
- PHP 7.1 lub nowsze
- MySQL 5.7+ albo MariaDB 10.3+
- Działająca wysyłka e-maili (jeśli Twoje e-maile z potwierdzeniem zamówienia dochodzą, warunek jest spełniony)

**PrestaShop 1.7:** od wersji modułu 1.1.0 ten sam plik ZIP instaluje się w PrestaShop od 1.7.0 do 1.7.8. Formularz wyświetla się przez hook `displayCustomerLoginFormAfter`, który motyw Classic w wersji 1.7 już zawiera. Jeśli później przeniesiesz sklep na PrestaShop 8 lub 9, moduł i jego ustawienia pozostaną na miejscu.

## Instalacja

1. W back office otwórz **Moduły > Menedżer modułów**.
2. Kliknij **Zainstaluj moduł** i wybierz plik `dfmagiclink.zip`.
3. PrestaShop instaluje moduł, tworzy tabelę `ps_dfmagiclink_token` i automatycznie rejestruje hooki.
4. Kliknij **Konfiguruj**, aby otworzyć stronę ustawień.

Zaraz po instalacji formularz magic link pojawia się pod standardowym formularzem logowania w Twoim sklepie, z ustawieniami domyślnymi (linki ważne 15 minut, rate limiting włączony).

## Konfiguracja

Wszystkie ustawienia znajdują się w **Moduły > Menedżer modułów > DataFirefly Magic Link > Konfiguruj**.

### Włącz Magic Link

Przełącznik główny. Ustawiony na _Nie_ usuwa formularz z frontu, a istniejące linki przestają działać (klient dostaje czytelny komunikat).

### Wyświetlaj na stronie logowania

Steruje wstawianiem formularza pod standardowym logowaniem. Możesz wyłączyć wyświetlanie, zachowując moduł aktywny, na przykład jeśli osadzasz formularz w innym miejscu przez własny motyw.

### Czas ważności (minuty)

Czas, przez jaki link pozostaje użyteczny po wysłaniu. Domyślnie: **15 minut**. Minimum 1, maksimum 1440 (24 godziny). Zalecamy zakres od 15 do 60 minut: wystarczająco długo na doręczenie e-maila, wystarczająco krótko, aby ograniczyć okno ekspozycji.

### Maksymalna liczba żądań na IP i godzinę

Limit żądań o link akceptowanych z jednego adresu IP w ruchomym oknie godzinnym. Domyślnie: **5**. Chroni przed zautomatyzowanymi próbami nadużyć.

### Maksymalna liczba żądań na e-mail i godzinę

Limit żądań dla jednego konta klienta w ruchomym oknie godzinnym. Domyślnie: **3**. Powyżej limitu żądania są po cichu ignorowane (wyświetlany komunikat pozostaje ogólny, aby nie ujawniać stanu konta).

Na czas testów tymczasowo podnieś te limity albo wyczyść tabelę `ps_dfmagiclink_token`, w przeciwnym razie szybko wyczerpiesz limit 3 żądań na godzinę na własnym koncie.

### Przekierowanie po zalogowaniu

Strona, na którą trafia klient po udanym logowaniu: **Moje konto** (domyślnie), **Historia zamówień** albo **Strona główna**.

### Statystyki i czyszczenie

Trzy liczniki na górze strony konfiguracji: aktywne tokeny, logowania z ostatnich 24 godzin, linki wysłane w ciągu 24 godzin. Przycisk **Wyczyść wygasłe tokeny** usuwa tokeny przeterminowane oraz tokeny zużyte starsze niż 24 godziny.

## Ścieżka klienta

1. Klient otwiera stronę logowania i wpisuje swój e-mail w bloku „Logowanie bez hasła".
2. Moduł sprawdza konto, generuje token 256-bitowy, zapisuje jego hash SHA-256 i wysyła e-mail. Odpowiedź na ekranie jest celowo ogólna („Jeśli konto o tym adresie istnieje..."), aby uniemożliwić enumerację kont.
3. Klient klika przycisk w e-mailu i trafia na samodzielną **stronę potwierdzenia** z wyświetlonym imieniem.
4. Klika „Zaloguj mnie": token zostaje zużyty, sesja PrestaShop otwarta, natywne hooki uwierzytelniania wyzwolone, a następnie następuje przekierowanie na skonfigurowaną stronę.

**Po co strona potwierdzenia?** Outlook Safe Links, Gmail i firmowe antywirusy automatycznie odwiedzają linki w odebranych e-mailach. Bez tego kroku skanery zużywałyby link przed klientem. Token jest zużywany wyłącznie przy realnym kliknięciu (żądanie POST), nigdy przy samej wizycie (GET). To wzorzec stosowany przez Slack, Notion i Vercel.

## E-maile

Szablony znajdują się w `modules/dfmagiclink/mails//` (fr, en, es, de), w wersji HTML (`magiclink.html`) i tekstowej (`magiclink.txt`). Język e-maila automatycznie odpowiada językowi konta klienta. Dla języka sklepu bez dołączonego szablonu (polski, włoski, niderlandzki, portugalski...) e-mail jest wysyłany po angielsku.

Dostępne zmienne: `{firstname}`, `{lastname}`, `{email}`, `{magic_link}`, `{ttl}`, `{shop_name}`, `{ip}`.

Aby dostosować szablon, skopiuj go do katalogu mails swojego motywu (`themes/twoj-motyw/modules/dfmagiclink/mails/`), dzięki czemu zmiany przetrwają aktualizacje modułu.

## Bezpieczeństwo

- **Tokeny 256-bitowe** generowane przez `random_bytes()`, kodowane w base64 bezpiecznym dla adresów URL.
- **Hash SHA-256 w bazie**: surowy token istnieje wyłącznie w e-mailu. Wyciek tabeli nie daje żadnego użytecznego linku.
- **Ścisłe jednorazowe użycie**: token jest oznaczany jako zużyty przed otwarciem sesji.
- **Ochrona przed enumeracją**: odpowiedź jest identyczna niezależnie od tego, czy konto istnieje.
- **Podwójny rate limiting** per IP i per konto.
- **CSRF**: żądanie AJAX jest chronione natywnym tokenem bezpieczeństwa PrestaShop.
- **noindex**: wszystkie strony modułu wysyłają nagłówek `X-Robots-Tag: noindex, nofollow, noarchive`.

## Rozwiązywanie problemów

### E-mail nie dociera

Sprawdź po kolei: folder spamu u klienta (SPF i DKIM Twojej domeny), limit żądań (licznik „wysłane linki" w konfiguracji) oraz to, czy konto klienta jest aktywne. Wysyłkę po stronie serwera potwierdzisz, zaglądając do tabeli `ps_dfmagiclink_token`: po każdym żądaniu powinien pojawić się wiersz z `used_at` równym NULL.

### „Ten link wygasł albo został już użyty"

Link przekroczył czas ważności albo został już wykorzystany. Klient może po prostu poprosić o nowy link na stronie logowania.

### Formularz nie pojawia się na stronie logowania

Sprawdź, czy opcja „Wyświetlaj na stronie logowania" jest włączona, a następnie wyczyść cache (**Ustawienia zaawansowane > Wydajność > Wyczyść cache**). Sprawdź też, czy Twój motyw faktycznie wykonuje hook `displayCustomerLoginFormAfter`, robią to motywy Classic i Hummingbird oraz niemal wszystkie motywy dostępne na rynku.

## Deinstalacja

Deinstalacja usuwa tabelę `ps_dfmagiclink_token` i wszystkie wartości konfiguracji. Żadne konto klienta nie jest modyfikowane, żadne hasło nie jest ruszane. Standardowe logowanie działa dalej normalnie.
