Moja strona rejestru prawidłowo wyświetla formularz z CsrfToken ( {{ csrf_field() }}
) obecnym w formularzu).
Formularz HTML
<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>
Używam wbudowanego uwierzytelniania dla użytkowników. Nie zmieniłem niczego poza trasami i przekierowaniami.
Kiedy wysyłam formularz (tuż po ponownym załadowaniu również), daje to, że Strona wygasła z powodu braku aktywności. Odśwież i spróbuj ponownie. błąd.
Być może brakuje mi bardzo małej rzeczy. Ale nie wiem, co to jest. Jakaś pomoc?
Aktualizacja
Znalazłem problem. Sterownik sesji został ustawiony na array. Zmieniono go na plik i błąd zniknął. Ale co jest nie tak, jeśli używam tablicy?
php
laravel
csrf
laravel-5.5
Sougata Bose
źródło
źródło
array
. Zmieniono go na plik i błąd zniknął. Ale co jest nie tak, jeśli używam tablicy?Odpowiedzi:
Jeśli dochodzisz do tej odpowiedzi bezpośrednio z wyszukiwania , upewnij się, że dodałeś już token csrf do formularza za pomocą
{{ csrf_field() }}
podobnego OP.Jeśli masz sterownik sesji ustawiony na plik:
Może mieć coś wspólnego z tym, że storage_path nie jest zapisywalny. Tutaj przechowuje dane sesji dotyczące tokenów, jeśli używasz sesji opartych na plikach. Można zweryfikować za pomocą
is_writable(config('session.files'))
W przypadku OP sterownik sesji został ustawiony na array. Tablica służy tylko do testowania. Ponieważ dane nie są utrwalane, nie będzie można porównać tokena przy następnym żądaniu.
https://laravel.com/docs/5.5/session#configuration
Sprawdź config / session.php
Wreszcie problem, który właśnie miałem, mieliśmy projekt, który ma domenę sesji i bezpieczne ustawienia w config / session.php, ale strona programistyczna nie używa HTTPS (SSL / TLS). To spowodowało ten ogólny błąd, ponieważ session.secure było domyślnie ustawione na true.
źródło
Carbon::setTestNow($time);
w testach, nie wyczyściłem goCarbon::setTestNow();
później.Napotkałem ten sam problem w Laravel 5.5. W moim przypadku stało się to po zmianie trasy z GET na POST. Problem polegał na tym, że zapomniałem przekazać tokena CSRF po przełączeniu na POST.
Możesz opublikować token CSRF w swoim formularzu, dzwoniąc pod numer:
Lub wyklucz swoją trasę w app / Http / Middleware / VerifyCsrfToken.php
źródło
csrf_field()
obecny w formularzu. Przyjęta odpowiedź opisuje problem. Dzięki.Wypróbuj je wszystkie.
źródło
Spowodowało to
Illuminate\Session\TokenMismatchException
spojrzenie na ten przykładowy kod, jak go poprawnie obsługiwać:źródło
Mój przypadek został rozwiązany
SESSION_DOMAIN
, w moim lokalnym komputerze trzeba było ustawićxxx.localhost
. Powodowało to konflikty z produkcjąSESSION_DOMAIN
,xxx.com
która została ustawiona bezpośrednio w pliku konfiguracyjnym session.php.źródło
file
czycookie
?Niektóre informacje są przechowywane w pliku cookie, który jest powiązany z poprzednimi wersjami laravel w fazie rozwoju. Jest to więc sprzeczne z tokenami wygenerowanymi przez csrf, które są generowane przez inne wersje. Po prostu wyczyść plik cookie i spróbuj.
źródło
<input type="hidden" name="_token" value="Umr1AlG3sScdUWGtMoHcQPPKASsR7qsd5ZE1H3Xv">
rodzaj kodu w wygenerowanym html?Dla tych, którzy nadal mają problem i nic nie pomogło. Zwróć uwagę na parametr mbstring.func_overload php.ini. Musi być ustawiony na 0. A mbstring.internal_encoding ustawiony na UTF-8. W moim przypadku to był problem.
źródło
Zmieniłem uprawnienia do przechowywania i błąd zniknął. Wyglądało na to, że problemem był brak pozwolenia.
źródło
dodaj
@csrf
w formularzu, a także przejdź do VerifyCsrfToken.phpapp-> Http-> Middleware-> VerifyCsrfToken.php
źródło
W moim przypadku strona działała poprawnie na serwerze, ale nie lokalnie. Wtedy pamiętam, że pracowałem nad bezpieczną stroną internetową.
Więc w pliku config.session.php ustaw zmienną secure na false
źródło
Miałem aplikację z wieloma subdomenami i problemem między nimi był plik cookie sesji. Usunięcie plików cookie rozwiązało mój problem.
Spróbuj także ustawić plik
SESSION_DOMAIN
in .env . Użyj dokładnie tej subdomeny, którą przeglądasz.źródło
Upewnij się, że masz poprawny czas systemowy na serwerze WWW. W moim przypadku maszyna włóczęga była w przyszłości (26 stycznia 14:08:26 UTC 2226), więc oczywiście czas w pliku cookie sesji mojej przeglądarki wygasł około 200+ lat temu.
źródło
zestaw mbstring.func_overload = 2
pomogło mi
źródło
Wymyśliłem dwa rozwiązania, aby uniknąć tego błędu 1), dodając chroniony $ z wyjątkiem = ['/ yourroute'] możliwe wyłączenie kontroli tokenu csrf ze zdefiniowanego katalogu głównego. 2) Po prostu skomentuj \ App \ Http \ Middleware \ VerifyCsrfToken :: wiersz klasy w chronionej grupie oprogramowania pośredniego w jądrze
źródło
Miałem ten sam problem, ale problem nie tkwi w frameworku, ale w przeglądarce. Nie wiem dlaczego, ale w moim przypadku Google Chrome automatycznie blokuje pliki cookie. Po dozwolonych plikach cookie problem został rozwiązany.
źródło
Krótka odpowiedź
Dodaj wpis trasy dla
register
wapp/Http/Middleware/VerifyCsrfToken.php
i wyczyść pamięć podręczną i trasę pamięci podręcznej za pomocą poleceń:
Detale
Za każdym razem, gdy wchodzisz na stronę Laravel, generowany jest token, nawet jeśli sesja nie została rozpoczęta. Następnie w każdym żądaniu ten token (przechowywany w plikach cookie) zostanie zweryfikowany pod kątem czasu wygaśnięcia, ustawionego w
SESSION_LIFETIME
polu wconfig/session.php
pliku.Jeśli pozostawisz witrynę otwartą dłużej niż przez czas wygaśnięcia i spróbujesz wysłać żądanie, ten token zostanie oceniony i zwróci błąd wygaśnięcia. Tak więc, aby pominąć tę walidację na formularzach, które są poza funkcjami uwierzytelnionych użytkowników (takich jak rejestracja lub logowanie), możesz dodać trasę except w
app/Http/Middleware/VerifyCsrfToken.php
.źródło
Wiele razy tak się dzieje, ponieważ testujesz projekt w przeszłości
źródło
Rozwiązanie:
użyj nowej karty incognito, a następnie przetestuj ją ponownie.
powód:
w moim przypadku inny użytkownik zalogował się do mojego panelu administratora
źródło