Laravel ialah rangka kerja PHP popular yang mempunyai banyak ciri dan alatan berkuasa yang sangat memudahkan pembangunan aplikasi web. Antaranya, sistem pengesahan Laravel digunakan secara meluas dalam pelbagai aplikasi web untuk mengurus log masuk pengguna, pendaftaran, tetapan semula kata laluan dan operasi lain dengan mudah. Walau bagaimanapun, sesetengah pengguna menghadapi masalah apabila menggunakan sistem pengesahan Laravel: mereka tidak boleh log keluar. Jadi, apakah punca masalah ini? Bagaimana untuk menyelesaikannya?
Apabila pengguna log masuk menggunakan sistem pengesahan Laravel, mereka boleh log keluar seperti biasa dalam banyak kes. Walau bagaimanapun, sesetengah pengguna mendapati bahawa tidak kira berapa kali mereka log keluar, mereka sebenarnya tidak boleh log keluar. Setiap kali mereka membuka semula tapak web, mereka dilog masuk secara automatik, dan walaupun mereka menutup penyemak imbas, mereka tidak dapat melihat skrin log masuk. Ini membawa masalah besar kepada pengguna dan menjejaskan pengalaman pengguna mereka.
Punca masalah ini adalah ciri keselamatan sistem pengesahan Laravel. Khususnya, Laravel menggunakan Sesi PHP untuk mengekalkan status log masuk pengguna, dan Sesi mempunyai ciri penting: apabila ia dibuat, ia akan dicache pada pelayan dan tidak akan dipadamkan sehingga masa tamat tempoh. Sistem pengesahan Laravel menggunakan pengawal "web" secara lalai, yang menggunakan pemacu "fail" untuk menyimpan sesi pengguna. Ini bermakna setiap kali pengguna melakukan tindakan log masuk dalam aplikasi web, Laravel menyimpan maklumat pengguna dalam fail dan menyimpan maklumat fail dalam kuki dalam penyemak imbas pengguna. Oleh itu, walaupun pengguna menutup penyemak imbas, kuki masih wujud, dan Sesi pada pelayan belum tamat tempoh, jadi Laravel masih berfikir bahawa pengguna telah log masuk, yang membawa kepada masalah tidak dapat log keluar.
Untuk menyelesaikan masalah ini, kami perlu menetapkan semula operasi Sesi sistem pengesahan Laravel. Antaranya, kaedah paling mudah ialah mengosongkan fail Sesi secara manual. Kita boleh menjalankan arahan berikut dalam terminal baris arahan projek Laravel:
php artisan session:clear
Arahan ini akan mengosongkan semua fail Sesi supaya pengguna benar-benar boleh log keluar. Walau bagaimanapun, kaedah ini tidak sesuai kerana ia akan memaksa semua pengguna log masuk untuk log keluar, yang jelas bukan hasil yang diingini.
Oleh itu, penyelesaian yang lebih baik ialah menggunakan mekanisme pengendalian peristiwa dalam Laravel untuk mencetuskan operasi tetapan semula Sesi secara automatik. Kami boleh mendaftarkan perisian tengah global dalam fail app/Http/Kernel.php projek Laravel untuk mendengar acara "log keluar" sistem pengesahan Laravel dan melaksanakan operasi pembersihan Sesi apabila peristiwa itu berlaku.
use Illuminate\Support\Facades\Event; use Illuminate\Auth\Events\Logout; protected $middleware = [ // ... \App\Http\Middleware\ClearSessionAfterLogout::class, ]; Event::listen(Logout::class, function (Logout $event) { session()->flush(); });
Dalam kod di atas, kami telah mendaftarkan perisian tengah bernama "ClearSessionAfterLogout" untuk mendengar acara "log keluar" Laravel dan melakukan operasi pembersihan Sesi apabila peristiwa itu dicetuskan. Selain itu, kami mendaftarkan pendengar acara secara global untuk mencetuskan operasi pembersihan Sesi secara automatik apabila acara "log keluar" dicetuskan.
Apabila pengguna melakukan operasi log masuk, Laravel akan membuat Sesi secara automatik Masa tamat tempoh lalai Sesi ialah 2 jam. Oleh itu, apabila pengguna menutup penyemak imbas, jika Sesi belum tamat tempoh, kami boleh mengosongkan Sesi secara automatik melalui operasi di atas, supaya pengguna perlu log masuk semula pada kali berikutnya dia membuka tapak web.
Ringkasan: Sebab mengapa sistem pengesahan Laravel tidak boleh keluar disebabkan oleh ciri Sesi Kami boleh mengosongkan fail Sesi secara manual, atau kami boleh menggunakan mekanisme pemprosesan acara untuk mengosongkan fail Sesi secara automatik. Tidak kira kaedah yang digunakan, pengguna boleh benar-benar log keluar, mengekalkan keselamatan dan kestabilan aplikasi.
Atas ialah kandungan terperinci Mengapakah laravel auth tidak boleh keluar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!