DataFirefly Magic Link: logowanie bez hasła
Instalacja i konfiguracja logowania bez hasła przez link e-mail w PrestaShop 8 i 9.
Prezentacja
DataFirefly Magic Link dodaje do Twojego sklepu PrestaShop 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 8.0 do 9.x
- PHP 8.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)
Instalacja
- W back office otwórz Moduły > Menedżer modułów.
- Kliknij Zainstaluj moduł i wybierz plik
dfmagiclink.zip. - PrestaShop instaluje moduł, tworzy tabelę
ps_dfmagiclink_tokeni automatycznie rejestruje hooki. - 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
- Klient otwiera stronę logowania i wpisuje swój e-mail w bloku „Logowanie bez hasła”.
- 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.
- Klient klika przycisk w e-mailu i trafia na samodzielną stronę potwierdzenia z wyświetlonym imieniem.
- 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/<jezyk>/ (fr, en, es, de), w wersji HTML (magiclink.html) i tekstowej (magiclink.txt). Język e-maila automatycznie odpowiada językowi konta klienta.
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.