Halaman pendaftaran saya menunjukkan formulir dengan benar dengan CsrfToken ( {{ csrf_field() }}
) hadir dalam formulir).
Formulir HTML
<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>
Saya menggunakan otentikasi bawaan untuk pengguna. Tidak mengubah apa pun kecuali rute dan pengalihan.
Ketika saya mengirimkan formulir (hanya setelah memuat ulang juga), itu memberi bahwa halaman telah kedaluwarsa karena tidak aktif. Segarkan dan coba lagi. kesalahan.
Menjadi saya, saya kehilangan hal yang sangat kecil. Tapi tidak yakin apa itu. Ada bantuan?
Memperbarui
Menemukan masalahnya. Pengemudi sesi diatur ke array. Mengubahnya menjadi file dan kesalahan hilang sekarang. Tapi apa salahnya jika saya menggunakan array?
php
laravel
csrf
laravel-5.5
Sougata Bose
sumber
sumber
array
. Mengubahnya menjadi file dan kesalahan hilang sekarang. Tapi apa salahnya jika saya menggunakan array?Jawaban:
Jika Anda datang ke jawaban ini langsung dari pencarian , pastikan Anda telah menambahkan token csrf ke formulir Anda dengan
{{ csrf_field() }}
seperti OP.Jika Anda mengatur driver sesi ke file:
Mungkin ada hubungannya dengan storage_path yang tidak dapat ditulis. Di sinilah ia menyimpan data sesi mengenai token jika Anda menggunakan sesi berbasis file. Dapat diverifikasi dengan
is_writable(config('session.files'))
Untuk OP, pengandar sesi diatur ke array. Larik hanya untuk pengujian. Karena data tidak disimpan, itu tidak akan dapat membandingkan token pada permintaan berikutnya.
https://laravel.com/docs/5.5/session#configuration
Periksa config / session.php
Terakhir, masalah yang baru saja saya alami, kami memiliki proyek yang memiliki domain sesi dan pengaturan aman di config / session.php tetapi situs pengembangan tidak menggunakan HTTPS (SSL / TLS). Ini menyebabkan kesalahan umum ini karena session.secure disetel ke true secara default.
sumber
Carbon::setTestNow($time);
dalam tes saya tidak membersihkannya dengan menggunakanCarbon::setTestNow();
sesudahnya.Saya mengalami masalah yang sama di Laravel 5.5. Dalam kasus saya, itu terjadi setelah mengubah rute dari GET ke POST. Masalahnya adalah karena saya lupa memberikan token CSRF ketika saya beralih ke POST.
Anda dapat memposting token CSRF di formulir Anda dengan menelepon:
Atau kecualikan rute Anda di app / Http / Middleware / VerifyCsrfToken.php
sumber
csrf_field()
hadir dalam bentuk. Jawaban yang diterima menjelaskan masalahnya. Terima kasih.Coba semuanya.
sumber
Ini disebabkan karena
Illuminate\Session\TokenMismatchException
lihat contoh kode ini bagaimana menanganinya dengan benar:sumber
Kasus saya diselesaikan dengan
SESSION_DOMAIN
, di mesin lokal saya harus diatur kexxx.localhost
. Itu menyebabkan konflik dengan produksiSESSION_DOMAIN
,xxx.com
yang ditetapkan langsung di file konfigurasi session.php.sumber
file
ataucookie
?Beberapa informasi disimpan dalam cookie yang terkait dengan versi laravel sebelumnya dalam pengembangan. Jadi ini bertentangan dengan token yang dihasilkan csrf yang dihasilkan oleh versi lain. Hapus saja cookie dan cobalah.
sumber
<input type="hidden" name="_token" value="Umr1AlG3sScdUWGtMoHcQPPKASsR7qsd5ZE1H3Xv">
jenis kode di html yang dihasilkan?Bagi mereka yang masih bermasalah dan tidak ada yang membantu. Perhatikan parameter php.ini mbstring.func_overload. Ini harus diatur ke 0. Dan mbstring.internal_encoding diatur ke UTF-8. Dalam kasus saya, itu adalah masalah.
sumber
Saya mengubah izin ke penyimpanan dan kesalahan telah hilang. Tampaknya kurangnya izin adalah masalahnya.
sumber
tambahkan
@csrf
formulir dan juga buka VerifyCsrfToken.phpapp-> Http-> Middleware-> VerifyCsrfToken.php
sumber
Dalam kasus saya, situs itu baik-baik saja di server tetapi tidak di lokal. Kemudian saya ingat saya sedang mengerjakan situs web yang aman.
Jadi di file config.session.php, setel variabel aman ke false
sumber
Saya memiliki aplikasi dengan beberapa subdomain dan cookie sesi adalah masalah di antara keduanya. Menghapus cookie menyelesaikan masalah saya.
Selain itu, coba setel file
SESSION_DOMAIN
dalam .env . Gunakan subdomain persis seperti yang Anda jelajahi.sumber
Pastikan untuk memiliki waktu sistem yang benar di server web Anda. Dalam kasus saya, mesin gelandangan itu di masa depan (26 Jan 14:08:26 UTC 2226) jadi tentu saja waktu di cookie sesi browser saya telah kedaluwarsa sekitar 200+ tahun yang lalu.
sumber
set mbstring.func_overload = 2
itu membantu saya
sumber
Saya telah menemukan dua solusi untuk menghindari kesalahan ini 1) dengan menambahkan dilindungi $ kecuali = ['/ yourroute'] kemungkinan menonaktifkan pemeriksaan token csrf dari root yang ditentukan. 2) cukup beri komentar \ App \ Http \ Middleware \ VerifyCsrfToken :: baris kelas di grup middleware yang dilindungi di kernel
sumber
Saya memiliki masalah yang sama tetapi masalahnya bukan pada kerangka kerja tetapi pada browser. Saya tidak tahu mengapa tetapi google chrome memblokir cookie secara otomatis, dalam kasus saya. Setelah cookie diizinkan, masalahnya teratasi.
sumber
Jawaban singkat
Menambahkan entri rute untuk
register
diapp/Http/Middleware/VerifyCsrfToken.php
dan hapus cache dan rute cache dengan perintah:
Detail
Setiap kali Anda mengakses situs Laravel, token dibuat, bahkan jika sesi belum dimulai. Kemudian, dalam setiap permintaan, token ini (disimpan dalam cookie) akan divalidasi terhadap waktu kedaluwarsanya, yang ditetapkan di
SESSION_LIFETIME
bidang padaconfig/session.php
file.Jika Anda membiarkan situs tetap terbuka selama lebih dari waktu kedaluwarsa dan mencoba membuat permintaan, token ini akan dievaluasi dan kesalahan kedaluwarsa akan kembali. Jadi, untuk melewati validasi ini pada formulir yang berada di luar fungsi pengguna yang diautentikasi (seperti register atau login), Anda dapat menambahkan rute kecuali di
app/Http/Middleware/VerifyCsrfToken.php
.sumber
Sering kali ini terjadi karena Anda menguji proyek di tanggal sebelumnya
sumber
Larutan:
gunakan tab baru penyamaran lalu uji lagi.
alasan:
dalam kasus saya, pengguna lain masuk dengan panel admin saya
sumber