Jeg er ny med Laravel, og jeg har et problem som jeg ikke forstår. Jeg har et loggskjema i prosjektet mitt, og metoden min er POST. Når jeg prøver en forespørsel er resultatet:
Siden har utløpt på grunn av inaktivitet. Vennligst oppdater og prøv igjen.'
Men hvis jeg endrer metoden til GET, fungerer det bra.
Kan noen fortelle meg hvorfor er det og hvordan jeg fikser det? fordi jeg selvfølgelig trenger POST-metoden.
Dette problemet kommer fra CSRF-token-verifiseringen som mislykkes. Så enten legger du ikke ut en, eller så legger du ut en feil.
Grunnen til at det fungerer for GET er at for en GET-rute i Laravel er det ikke lagt ut noe CSRF-token.
Du kan enten legge inn et CSRF-token i skjemaet ditt ved å ringe:
{{ csrf_field() }}
Eller ekskludere ruten din (IKKE ANBEFALT AV SIKKERHETSHENSYN) i app/Http/Middleware/VerifyCsrfToken.php
:
protected $except = [
'your/route'
];
I mitt tilfelle fikk jeg den samme feilmeldingen og fant ut at jeg har glemt å legge til csrf_token
for skjemafeltet. Legg deretter til csrf_token
.
Ved hjelp av skjemahjelper som vil være,
{{ csrf_field() }}
Eller uten skjemahjelper som vil være,
<input type="hidden" name="_token" value="{{ csrf_token() }}">
Hvis det ikke fungerer, så...
Oppdater nettleserens cache
og nå fungerer det kanskje, takk.
Oppdatering for Laravel 5.6
Laravel integrerer nye @csrf
i stedet for {{ csrf_field() }}
. Det ser finere ut nå.
<form action="">
@csrf
...
</form>