Artikel ini akan meneroka pengesahan data dan mengapa ia begitu penting. Kami akan membandingkan pengesahan klien dengan pengesahan sisi pelayan dan menjelaskan mengapa pengesahan sisi klien tidak boleh dipercayai.
Kami kemudiannya akan memperkenalkan beberapa peraturan pengesahan mudah yang saya gunakan dalam aplikasi Laravel saya. Akhirnya, kita akan belajar bagaimana untuk membuat peraturan pengesahan kita sendiri dan menguji mereka untuk memastikan ia berfungsi seperti yang diharapkan.
Apakah pengesahan data?
Pengesahan data adalah proses memeriksa kesahihan data sebelum cuba menggunakannya. Ini boleh menjadi item yang mudah untuk diperiksa, contohnya, sama ada bidang yang diperlukan wujud dalam permintaan, atau lebih banyak pemeriksaan kompleks seperti sama ada medan sepadan dengan corak tertentu atau sama ada ia unik dalam pangkalan data.
Biasanya, apabila mengesahkan data dalam aplikasi web, jika data tidak sah, anda perlu mengembalikan mesej ralat kepada pengguna.
Ini membantu mencegah kelemahan keselamatan, rasuah data dan meningkatkan ketepatan data. Oleh itu, kami akan terus memproses permintaan hanya jika data itu sah.
Ingat, anda tidak boleh mempercayai sebarang data dari pengguna (sekurang -kurangnya sebelum anda mengesahkannya!).
Mengapa pengesahan data penting?
Terdapat banyak sebab mengapa pengesahan data penting, termasuk:
# meningkatkan keselamatan
Salah satu sebab yang paling penting untuk mengesahkan data dalam aplikasi anda adalah untuk meningkatkan keselamatan. Dengan mengesahkan data sebelum menggunakannya, anda boleh mengurangkan kemungkinan input berniat jahat digunakan untuk menyerang aplikasi atau pengguna anda.
# mencegah penyimpanan data yang salah
Bayangkan bahawa kita mengharapkan medan menjadi integer, tetapi pengguna melewati fail. Ini boleh menyebabkan pelbagai masalah apabila kita cuba menggunakan data tersebut di tempat lain dalam aplikasi.
Untuk memberi contoh lain, katakan anda sedang membina aplikasi web yang membolehkan pengguna mengundi pada pengundian. Pengundian hanya boleh diundi antara masa
masa dan AppModelsPoll
yang dinyatakan pada model opens_at
. Apa yang berlaku jika seseorang secara tidak sengaja menetapkan masa closes_at
sebelum masa closes_at
ketika membuat pengundian? Bergantung pada bagaimana anda mengendalikan ini dalam aplikasi anda, ini boleh menyebabkan pelbagai masalah. opens_at
# pastikan perintah artisan dimasukkan dengan betul
Di samping dapat mengesahkan data yang diluluskan dalam permintaan HTTP, anda juga boleh mengesahkan perintah artisan. Ini menghalang pemaju daripada secara tidak sengaja memasuki nilai tidak sah dan menyebabkan masalah dengan permohonan.
pengesahan pelanggan dan pengesahan pelayan
Biasanya, anda boleh menggunakan dua jenis pengesahan dalam aplikasi anda: pengesahan sisi pelanggan dan pengesahan sisi pelayan.
# Pengesahan Pelanggan
Pengesahan pelanggan adalah pengesahan yang dilakukan dalam penyemak imbas sebelum menghantar data ke pelayan. Ia boleh dilaksanakan menggunakan JavaScript atau atribut HTML.
Contohnya, kita boleh menambah beberapa pengesahan mudah ke medan nombor dalam HTML untuk memastikan nombor yang dimasukkan oleh pengguna adalah antara 1 dan 10:
<input type="number" min="1" max="10" required>medan input ini mempunyai empat bahagian berasingan, yang berguna untuk pengesahan klien:
- : Ini memberitahu penyemak imbas bahawa input harus menjadi nombor. Pada kebanyakan penyemak imbas, ini akan menghalang pengguna memasuki apa -apa selain nombor. Pada peranti mudah alih, ia juga boleh membawa papan kekunci angka dan bukannya papan kekunci biasa, yang sangat bermanfaat untuk pengalaman pengguna.
type="number"
- : Ini memberitahu penyemak imbas bahawa nombor yang dimasukkan mestilah sekurang -kurangnya 1.
min="1"
- : Ini memberitahu penyemak imbas bahawa nombor yang dimasukkan mestilah sehingga 10.
max="10"
- : Ini memberitahu penyemak imbas bahawa medan diperlukan dan mesti diisi sebelum menyerahkan borang.
required
Ini sangat bermanfaat untuk membimbing pengguna dan meningkatkan pengalaman pengguna keseluruhan aplikasi. Tetapi itu hanya perlu dipertimbangkan: panduan. Anda tidak sepatutnya bergantung semata -mata pada pengesahan klien sebagai satu -satunya bentuk pengesahan dalam permohonan anda.
Jika seseorang membuka alat pemaju dalam penyemak imbas mereka, mereka dapat dengan mudah mengeluarkan dan memintas pengesahan klien yang telah anda tetapkan.
Di samping itu, adalah penting untuk diingat bahawa apabila pengguna berniat jahat cuba menyerang aplikasi anda, mereka biasanya akan menggunakan skrip automatik untuk menghantar permintaan terus ke pelayan anda. Ini bermakna bahawa pengesahan pelanggan yang telah anda tetapkan akan dilangkau.
# Pengesahan sisi pelayan
Pengesahan sisi pelayan adalah pengesahan yang berjalan di backend aplikasi pada pelayan. Dalam konteks aplikasi Laravel, ini biasanya merupakan pengesahan yang berjalan dalam kelas pengawal atau kelas.
Oleh kerana pengesahan adalah pada pelayan anda, pengguna tidak dapat mengubahnya, ini adalah satu -satunya cara untuk memastikan bahawa data yang dihantar ke pelayan adalah sah.
Oleh itu, pastikan anda sentiasa mengaktifkan pengesahan sisi pelayan dalam aplikasi anda. Sebaik -baiknya, setiap bidang yang anda cuba baca dari permintaan harus disahkan sebelum cuba menggunakannya untuk melaksanakan logik perniagaan.
bagaimana Laravel mengendalikan pengesahan
Sekarang kita telah memahami apa pengesahan dan mengapa penting, mari kita lihat cara menggunakannya di Laravel.
Jika anda telah menggunakan Laravel untuk seketika, anda akan tahu bahawa Laravel mempunyai sistem pengesahan yang luar biasa yang dibina ke dalam rangka kerja. Oleh itu, sangat mudah untuk dimulakan dengan pengesahan dalam aplikasi anda.
Terdapat beberapa cara biasa untuk mengesahkan data di Laravel, tetapi kami akan meliputi dua cara yang paling biasa:
- Pengesahan Data Manual
- Sahkan data menggunakan kelas permintaan borang
# Pengesahan manual data
Untuk mengesahkan data secara manual (contohnya dalam kaedah pengawal), anda boleh menggunakan fasad IlluminateSupportFacadesValidator
dan panggil kaedah make
.
kita kemudian boleh lulus dua parameter ke make
kaedah:
-
data
- Data yang ingin kami sahkan -
rules
- peraturan yang ingin kami sahkan data berdasarkan
Nota sampingan: Kaedah make
juga menerima dua parameter pilihan: messages
dan attributes
. Ini boleh digunakan untuk menyesuaikan mesej ralat yang dikembalikan kepada pengguna, tetapi kami tidak akan menutupnya dalam artikel ini.
mari kita lihat contoh di mana anda mungkin ingin mengesahkan dua bidang:
<input type="number" min="1" max="10" required>
Dalam contoh di atas, kita dapat melihat bahawa kita mengesahkan dua bidang: title
dan body
. Kami telah mengodkan nilai -nilai kedua -dua bidang ini untuk membuat contoh yang lebih jelas, tetapi dalam projek -projek sebenar anda biasanya mendapat bidang ini dari permintaan. Kami menyemak sama ada medan title
ditetapkan, adalah rentetan, dan mempunyai panjang maksimum 100 aksara. Kami juga menyemak sama ada medan description
ditetapkan, adalah rentetan, dan mempunyai panjang maksimum 250 aksara.
Selepas membuat validator, kita boleh memanggil kaedah pada contoh yang dikembalikan. Sebagai contoh, untuk memeriksa sama ada pengesahan gagal, kita boleh memanggil kaedah IlluminateValidationValidator
: fails
use Illuminate\Support\Facades\Validator; $validator = Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] );Begitu juga, kita juga boleh memanggil
kaedah pada contoh pengesahan: validate
$validator = Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] ); if ($validator->fails()) { // 一個或多個字段驗證失敗。 // 在此處進行處理... }Jika pengesahan gagal, kaedah
ini akan meningkatkan validate
. Laravel secara automatik akan mengendalikan pengecualian ini berdasarkan jenis permintaan yang dibuat (dengan mengandaikan bahawa anda tidak mengubah pengendalian pengecualian lalai dalam aplikasi anda). Jika permintaan itu adalah permintaan web, Laravel akan menggunakan ralat dalam sesi untuk mengarahkan pengguna kembali ke halaman sebelumnya untuk anda memaparkan. Sekiranya permintaan itu adalah permintaan API, Laravel mengembalikan respons IlluminateValidationValidationException
yang mengandungi perwakilan JSON ralat pengesahan seperti berikut: 422 Unprocessable Entity
Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] )->validate();# Gunakan kelas permintaan borang untuk mengesahkan data
Satu lagi cara biasa untuk mengesahkan data dalam aplikasi Laravel adalah menggunakan kelas permintaan borang. Kelas Permintaan Borang adalah kelas dengan lanjutan
yang digunakan untuk menjalankan pemeriksaan kebenaran dan pengesahan pada permintaan masuk. IlluminateFoundationHttpFormRequest
mari kita lihat contoh mudah. Katakan kita mempunyai pengawal
AppHttpControllersUserController
<input type="number" min="1" max="10" required>
Dalam kaedah pengawal, kita dapat melihat bahawa kita menerima kelas permintaan AppHttpRequestsUsersStoreUserRequest
(yang akan kita perkenalkan kemudian) sebagai parameter kaedah. Ini akan menunjukkan kepada Laravel bahawa kami mahu menjalankan pengesahan secara automatik dalam kelas permintaan ini apabila kaedah ini dipanggil lebih banyak permintaan HTTP.
Kemudian, kami menggunakan kaedah validated
pada contoh permintaan dalam kaedah pengawal untuk mendapatkan data yang disahkan dari permintaan. Ini bermakna ia hanya akan mengembalikan data yang disahkan. Sebagai contoh, jika kita cuba menyimpan medan profile_picture
baru dalam pengawal, kita juga mesti menambahkannya ke kelas permintaan borang. Jika tidak, kaedah validated
tidak akan mengembalikannya, jadi $request->validated('profile_picture')
akan kembali null
.
mari kita lihat Kelas Permintaan Borang AppHttpRequestsUsersStoreUserRequest
:
use Illuminate\Support\Facades\Validator; $validator = Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] );
kita dapat melihat bahawa kelas permintaan mengandungi dua kaedah:
-
authorize
: Kaedah ini digunakan untuk menentukan sama ada pengguna mempunyai hak untuk membuat permintaan. Jika kaedah kembalifalse
, tindak balas403 Forbidden
dikembalikan kepada pengguna. Jika kaedah kembalitrue
, peraturan pengesahan akan dijalankan. -
rules
: Kaedah ini digunakan untuk menentukan peraturan pengesahan yang harus dijalankan atas permintaan. Kaedah ini harus mengembalikan pelbagai peraturan yang harus dijalankan atas permintaan.
Dalam kaedah rules
, kami menyatakan bahawa medan name
mesti ditetapkan, mestilah rentetan, dan panjang maksimum mestilah 100 aksara. Kami juga menyatakan bahawa medan email
mesti ditetapkan, mestilah e -mel, dan mesti unik dalam jadual users
(pada lajur email
). Akhirnya, kami menyatakan bahawa medan password
mesti ditetapkan dan mesti lulus peraturan pengesahan kata laluan lalai yang telah kami tetapkan (kami akan menutup pengesahan kata laluan kemudian).
seperti yang anda lihat, ini adalah cara yang baik untuk memisahkan logik pengesahan dari logik pengawal, dan saya dapati ia menjadikan kod lebih mudah dibaca dan diselenggarakan.
Peraturan pengesahan yang biasa digunakan di Laravel
Seperti yang telah saya sebutkan, sistem pengesahan Laravel sangat kuat dan dengan mudah boleh menambah pengesahan ke aplikasi anda.
Dalam bahagian ini, kami akan dengan cepat memperkenalkan beberapa peraturan pengesahan mudah yang saya suka, yang saya fikir kebanyakan pengguna akan mendapat berguna dalam aplikasi mereka.
Jika anda berminat untuk melihat semua peraturan yang terdapat di Laravel, anda boleh menemui mereka dalam dokumentasi Laravel: http://miracleart.cn/link/45d5c43856059a4f97d43d6534be52d0
# Sahkan ArraySatu jenis pengesahan biasa yang perlu anda jalankan ialah array pengesahan. Ini boleh mengesahkan sama ada array ID yang diluluskan adalah sah, untuk mengesahkan sama ada pelbagai objek yang diluluskan dalam permintaan pengesahan mempunyai medan tertentu.
mari kita lihat contoh bagaimana untuk mengesahkan array, dan kemudian kita akan membincangkan apa yang sedang dilakukan:
<input type="number" min="1" max="10" required>
Dalam contoh di atas, kita lulus pelbagai objek, masing -masing dengan medan name
dan email
.
Untuk pengesahan, kita mula -mula menentukan bahawa medan users
ditetapkan dan merupakan array. Kemudian, kami menyatakan bahawa setiap item array (menggunakan users.*
arah) adalah array yang mengandungi medan name
dan email
.
Kemudian, kami menyatakan bahawa medan name
(menggunakan users.*.name
arah) mesti ditetapkan, mestilah rentetan dan tidak boleh melebihi 100 aksara. Kami juga menyatakan bahawa medan email
(menggunakan users.*.email
arahan) mesti ditetapkan, mestilah e -mel, dan mesti unik pada lajur users
jadual email
.
Dengan dapat menggunakan *
wildcard dalam peraturan pengesahan, kami dapat dengan mudah mengesahkan array data dalam permohonan kami.
# tarikh pengesahan
Laravel menyediakan beberapa peraturan pengesahan tarikh yang mudah yang boleh anda gunakan. Pertama, untuk mengesahkan bahawa medan adalah tarikh yang sah, anda boleh menggunakan date
peraturan:
use Illuminate\Support\Facades\Validator; $validator = Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] );
Jika anda lebih suka menyemak sama ada tarikh dalam format tertentu, anda boleh menggunakan peraturan date_format
:
$validator = Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] ); if ($validator->fails()) { // 一個或多個字段驗證失敗。 // 在此處進行處理... }
Anda mungkin perlu menyemak sama ada tarikh itu lebih awal atau lebih lambat daripada tarikh lain. Sebagai contoh, katakan permintaan anda mengandungi medan opens_at
dan closes_at
, dan anda ingin memastikan closes_at
lebih lewat daripada opens_at
dan opens_at
lebih lewat daripada atau sama dengan hari ini. Anda boleh menggunakan peraturan after
:
Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] )->validate();
Dalam contoh di atas, kita dapat melihat bahawa kita telah lulus today
sebagai parameter ke aturan opens_at
medan after
. Laravel akan cuba menukar rentetan ini ke dalam objek strtotime
yang sah menggunakan fungsi DateTime
dan membandingkannya dengan objek tersebut.
Untuk medan closes_at
, kami lulus opens_at
sebagai parameter kepada peraturan after_or_equal
. Laravel secara automatik akan mengesan bahawa ini adalah bidang lain yang disahkan dan membandingkan kedua -dua bidang antara satu sama lain.
Begitu juga, Laravel juga menyediakan before
dan before_or_equal
peraturan yang boleh anda gunakan untuk memeriksa sama ada tarikh lebih awal daripada tarikh lain:
{ "message": "The title field is required. (and 1 more error)", "errors": { "title": [ "The title field is required." ], "description": [ "The description field is required." ] } }
# Sahkan kata laluan
Sebagai pemaju web, tugas kami adalah untuk membantu pengguna selamat dalam talian. Salah satu cara yang boleh kita lakukan adalah untuk mempromosikan amalan kata laluan yang baik dalam aplikasi kami, seperti memerlukan kata laluan untuk panjang tertentu, mengandungi aksara tertentu, dll.
Laravel memudahkan kerja kami dengan menyediakan kelas IlluminateValidationRulesPassword
yang boleh kita gunakan untuk mengesahkan kata laluan.
Ia dilengkapi dengan beberapa kaedah yang boleh kita hubungkan bersama untuk membina peraturan pengesahan kata laluan yang kita mahu. Sebagai contoh, katakan kami mahu kata laluan pengguna memenuhi kriteria berikut:
- sekurang -kurangnya 8 aksara panjang
- mengandungi sekurang -kurangnya satu huruf
- mengandungi sekurang -kurangnya satu huruf besar dan satu huruf kecil
- mengandungi sekurang -kurangnya satu nombor
- mengandungi sekurang -kurangnya satu simbol
- bukan kata laluan yang bocor (iaitu, tidak dalam pangkalan data yang telah saya berisi rekod kata laluan yang dibocorkan dalam pelanggaran data sistem lain)
pengesahan kami mungkin kelihatan seperti ini:
<input type="number" min="1" max="10" required>
Seperti yang ditunjukkan dalam contoh, kami menggunakan kaedah yang boleh dikaitkan untuk membina peraturan pengesahan kata laluan yang kami mahukan. Tetapi apa yang berlaku jika kita menggunakan peraturan ini di pelbagai tempat yang berbeza (mis., Daftar, menetapkan semula kata laluan, kemas kini kata laluan pada halaman akaun anda, dll.) Dan kita perlu mengubah pengesahan ini untuk menguatkuasakan sekurang -kurangnya 12 aksara? Kita perlu melangkah melalui segala -galanya di mana peraturan ini digunakan dan mengemas kini mereka.
Untuk memudahkan ini, Laravel membolehkan kami menentukan set peraturan pengesahan kata laluan yang boleh kami gunakan sepanjang aplikasi kami. Kami boleh menentukan satu set peraturan lalai dengan menggunakan kaedah AppProvidersAppServiceProvider
seperti ini dalam kaedah boot
kami: Password::defaults()
use Illuminate\Support\Facades\Validator; $validator = Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] );Setelah melakukan ini, kita kini boleh memanggil
dalam peraturan pengesahan dan menggunakan peraturan yang kami tentukan dalam Password::defaults()
untuk: AppServiceProvider
$validator = Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] ); if ($validator->fails()) { // 一個或多個字段驗證失敗。 // 在此處進行處理... }# Sahkan warna
Hampir setiap projek yang saya kerjakan mengandungi beberapa bentuk pemetik warna. Sama ada pengguna memilih warna untuk profilnya, warna latar belakang untuk bahagian halaman, atau kandungan lain, ia adalah kandungan biasa.
Pada masa lalu, saya terpaksa menggunakan ungkapan biasa (saya akui saya tidak tahu banyak tentangnya) untuk mengesahkan bahawa warna adalah warna yang sah dalam format hex (mis.
untuk menggunakan: #FF00FF
hex_color
Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] )->validate();
Jika anda memuat naik fail ke aplikasi melalui pelayan, anda perlu mengesahkan bahawa fail itu sah sebelum cuba menyimpannya. Seperti yang anda boleh bayangkan, Laravel menyediakan beberapa peraturan pengesahan fail yang boleh anda gunakan.
Katakan anda ingin membenarkan pengguna memuat naik fail PDF (.pdf) atau Microsoft Word (.docx). Pengesahan mungkin kelihatan seperti ini:
Dalam contoh kod, kita dapat melihat bahawa kita mengesahkan jenis fail dan juga menetapkan beberapa had saiz fail minimum dan maksimum. Kami menggunakan kaedah
{ "message": "The title field is required. (and 1 more error)", "errors": { "title": [ "The title field is required." ], "description": [ "The description field is required." ] } }untuk menentukan jenis fail yang ingin kami benarkan.
Kaedah types
juga boleh menerima rentetan yang mengandungi akhiran lain yang menunjukkan unit saiz fail. Sebagai contoh, kita juga boleh menggunakan: min
max
-
10kb
-
10mb
-
10gb
Di samping itu, kita juga boleh menggunakan kaedah pada kelas - untuk memastikan fail itu adalah imej:
10tb
<input type="number" min="1" max="10" required>
Dalam contoh di atas, kami mengesahkan bahawa fail itu adalah imej, menetapkan beberapa had saiz fail minimum dan maksimum, dan menetapkan beberapa saiz maksimum (500 x 500 piksel).
anda mungkin mahu mengambil pendekatan yang berbeza untuk memfailkan muat naik dalam aplikasi anda. Sebagai contoh, anda mungkin mahu memuat naik terus dari pelayar pengguna ke penyimpanan awan (mis. S3). Jika anda lebih suka melakukan ini, anda mungkin ingin menyemak fail muat naik saya dalam artikel Laravel menggunakan FilePond, yang menunjukkan kepada anda bagaimana untuk melakukan ini, kaedah pengesahan yang berbeza yang mungkin perlu anda ambil, dan bagaimana untuk mengujinya.
# Sahkan bahawa bidang ada dalam pangkalan data
Satu lagi pemeriksaan biasa yang mungkin anda mahu lakukan ialah memastikan nilai wujud dalam pangkalan data.
Sebagai contoh, katakan anda mempunyai beberapa pengguna dalam aplikasi anda dan anda telah membuat laluan supaya anda boleh mengikatnya kepada pasukan. Oleh itu, dalam permintaan anda, anda mungkin perlu mengesahkan bahawa
3user_ids
yang diluluskan dalam permintaan wujud dalam jadualusers
.exists
Dalam contoh di atas, kami menyemak sama ada setiap ID yang diluluskan dalam arrayuse Illuminate\Support\Facades\Validator; $validator = Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] );
jadual.
Jika anda ingin pergi satu langkah lebih jauh, anda boleh memohon klausauser_ids
users
Ini adalah cara yang baik untuk memastikan data yang anda gunakan adalah sah dan wujud dalam pangkalan data sebelum cuba menggunakannya.id
ke peraturan
untuk menapis lagi pertanyaan yang berjalan:where
exists
Dalam contoh di atas, kami menyemak sama ada setiap ID yang diluluskan dalam array$validator = Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] ); if ($validator->fails()) { // 一個或多個字段驗證失敗。 // 在此處進行處理... }
jadual, dan lajur
Sama seperti peraturanuser_ids
pengguna ditetapkan keusers
. Oleh itu, jika kita lulus ID pengguna yang tidak disahkan, pengesahan akan gagal.id
is_verified
# Sahkan keunikan bidang dalam pangkalan datatrue
, Laravel juga menyediakan peraturan
yang boleh anda gunakan untuk memeriksa sama ada nilai dalam pangkalan data adalah unik.exists
Sebagai contoh, katakan anda mempunyai jadualunique
dan anda ingin memastikan medan:
ditetapkan, adalah e -mel, dan unik pada lajurusers
email
unique
Dalam contoh di atas, kami menyemak sama ada medanValidator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] )->validate();
jadual.
email
bagaimanapun, apa yang berlaku jika kita cuba menggunakan pengesahan ini pada halaman profil di mana pengguna boleh mengemas kini alamat e -mel mereka? Pengesahan akan gagal kerana terdapat baris dalam jadual users
yang mengandungi alamat e -mel pengguna cuba mengemaskini. Dalam kes ini, kita boleh menggunakan kaedahemail
untuk mengabaikan ID pengguna semasa memeriksa keunikan:users
Jika anda memilih untuk menggunakan kaedahignore
, anda pasti akan membaca amaran ini dalam dokumentasi Laravel:. mungkin juga bahawa kadang -kadang anda mahu menambah klausa
:ignore
tambahan kepada peraturan . Anda mungkin perlu melakukan ini untuk memastikan alamat e -mel adalah unik kepada pasukan tertentu (yang bermaksud pengguna lain dalam pasukan yang berbeza boleh menggunakan e -mel yang sama). Anda boleh melakukan ini dengan lulus penutupan ke kaedahunique
where
Buat Peraturan Pengesahan Anda Sendiriwhere
<input type="number" min="1" max="10" required>
Walaupun Laravel dilengkapi dengan banyak peraturan pengesahan terbina dalam, anda mungkin perlu membuat peraturan pengesahan tersuai untuk memenuhi kes penggunaan tertentu.
Mari lihat bagaimana untuk membina peraturan pengesahan tersuai, cara menggunakannya, dan kemudian cara menulis ujian untuknya.
Untuk tujuan artikel ini, kami tidak begitu prihatin terhadap apa yang kami sahkan. Kami hanya ingin memahami struktur umum membuat peraturan pengesahan tersuai dan bagaimana untuk menguji mereka. Oleh itu, kami akan membuat peraturan mudah untuk memeriksa sama ada rentetan itu adalah palindrome.
Jika anda tidak tahu, palindrome adalah urutan perkataan, frasa, nombor, atau watak lain yang membaca perkara yang sama di arah ke hadapan dan terbalik. Sebagai contoh, "Racecar" adalah palindrome kerana jika anda membalikkan rentetan, ia masih "racecar". Dan "Laravel" bukanlah palindrome, kerana jika anda membalikkan rentetan itu akan menjadi "Levaral".
untuk memulakan, kami akan membuat peraturan pengesahan baru dengan menjalankan arahan berikut dalam laluan projek:
baru untuk kami:
use Illuminate\Support\Facades\Validator; $validator = Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] );
Laravel secara automatik akan memanggil kaedah
App/Rules/Palindrome.php
apabila menjalankan peraturan. Kaedah ini menerima tiga parameter:$validator = Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] ); if ($validator->fails()) { // 一個或多個字段驗證失敗。 // 在此處進行處理... }
validate
: Nama harta yang disahkan.- : Nilai harta yang disahkan.
$attribute
- : penutupan yang anda boleh panggil jika pengesahan gagal.
$value
Oleh itu, kita boleh menambah logik pengesahan kita ke kaedah - seperti berikut:
$fail
dengan mesej ralat. Ini akan menyebabkan bidang gagal mengesahkan. Jika pengesahan berlalu, peraturan itu tidak akan melakukan apa -apa dan kami boleh terus menggunakan permohonan kami.
Sekarang kita telah membuat peraturan, kita boleh menggunakannya dalam aplikasi kita seperti ini:validate
Validator::make( data: [ 'title' => 'Blog Post', 'description' => 'Blog post description', ], rules: [ 'title' => ['required', 'string', 'max:100'], 'description' => ['required', 'string', 'max:250'], ] )->validate();
$fail
Walaupun ini adalah peraturan mudah yang kami buat untuk tujuan demonstrasi, saya harap ini akan memberi anda idea bagaimana untuk membina peraturan yang lebih kompleks untuk permohonan anda.menguji peraturan pengesahan anda sendiri
Sama seperti kod lain dalam aplikasi anda, adalah penting untuk menguji peraturan pengesahan anda untuk memastikan ia berfungsi seperti yang diharapkan. Jika tidak, anda mungkin mengambil risiko menggunakan peraturan yang tidak berfungsi seperti yang diharapkan.
Untuk memahami bagaimana untuk melakukan ini, mari kita lihat bagaimana untuk menguji peraturan palindrome yang kami buat di bahagian sebelumnya.
Untuk peraturan khusus ini, kami ingin menguji dua situasi:
- Apabila nilai adalah palindrome, peraturan itu berlalu.
- Apabila nilai bukan palindrome, peraturan gagal.
Anda mungkin mempunyai lebih banyak situasi dalam peraturan yang lebih kompleks, tetapi untuk tujuan artikel ini, kami tetap mudah.
kami akan membuat fail ujian baru bernama
tests/Unit/Rules
dalam direktoriPalindromeTest.php
.mari kita lihat fail ujian, dan kemudian kita akan membincangkan apa yang sedang dilakukan:
<input type="number" min="1" max="10" required>
Dalam fail ujian di atas, kami menentukan dua ujian:
rule_passes_with_a_valid_value
danrule_fails_with_an_invalid_value
.Seperti nama ujian, ujian pertama memastikan bahawa peraturan itu berlalu apabila nilai adalah palindrome, dan ujian kedua memastikan bahawa peraturan gagal apabila nilai itu bukan palindrome.
Kami menggunakan atribut
PHPUnitFrameworkAttributesDataProvider
untuk menyediakan senarai nilai yang sah dan tidak sah untuk ujian untuk ujian. Ini adalah cara yang baik untuk memastikan ujian anda kemas dan dapat menyemak pelbagai nilai dengan ujian yang sama. Sebagai contoh, jika seseorang menambah nilai yang sah baru kepada kaedahvalidValues
, ujian akan secara automatik berjalan terhadap nilai tersebut.Dalam ujian
rule_passes_with_a_valid_value
, kami menggunakan nilai yang sah untuk memanggil kaedahvalidate
pada peraturan. Kami lulus penutupan kepada parameterfail
(parameter ini dipanggil jika pengesahan dalaman peraturan gagal). Kami telah menyatakan bahawa jika penutupan dilaksanakan (iaitu, pengesahan gagal), ujian harus gagal. Jika kita sampai ke akhir ujian tanpa melaksanakan penutupan, maka kita tahu bahawa peraturan telah berlalu dan kita boleh menambah pernyataan mudahassertTrue(true)
untuk lulus ujian.Dalam ujian
rule_fails_with_an_invalid_value
, kita sama dengan yang pertama, tetapi kali ini kita lulus nilai yang tidak sah kepada peraturan. Kami telah menyatakan bahawa jika penutupan dilaksanakan (iaitu, pengesahan gagal), ujian harus lulus kerana kami mengharapkan penutupan itu dipanggil. Sekiranya kita sampai ke akhir ujian tanpa melaksanakan penutupan, tiada pernyataan dilaksanakan dan PHPUnit harus mencetuskan amaran untuk kita. Walau bagaimanapun, jika anda lebih suka memastikan bahawa ujian gagal lebih jelas daripada hanya memberikan kesilapan, anda mungkin perlu mengambil pendekatan yang sedikit berbeza untuk menulis ujian.Kesimpulan
Dalam artikel ini, kita mengkaji apa pengesahan dan mengapa ia penting. Kami membandingkan pengesahan klien dengan pengesahan sisi pelayan dan meneroka mengapa pengesahan sisi klien tidak boleh digunakan sebagai satu-satunya bentuk pengesahan dalam aplikasi.
kami juga meliputi beberapa peraturan pengesahan yang mudah yang saya suka gunakan dalam aplikasi Laravel saya. Akhirnya, kami meneroka cara membuat peraturan pengesahan anda sendiri dan menguji mereka untuk memastikan ia berfungsi seperti yang diharapkan.
Semoga anda kini cukup yakin untuk mula menggunakan lebih banyak pengesahan untuk meningkatkan keselamatan dan kebolehpercayaan permohonan anda.
- : Nilai harta yang disahkan.
Atas ialah kandungan terperinci Panduan Terbaik untuk Pengesahan Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

TOVERSIONAPHP-berasaskan-berasaskan, UseUrl-berasaskan Forversioningforclarityandeaseofrouting, separateVersionedcodetoavoidconflicts, decrecateoldversionswithclearCommunication, andconsidercustomheadershipshenershipshenershipshenershipshenershinlyhenershinlywenershinly

TosecurelyhandleAuthenticationandauthorizationInphp, ikuti: 1.alwayshashpasswordswithpassword_hash () andverifyUsingPassword_verify (), usePePreparedStatementStopreventsqlInjection, andStoreUserDatain $ _SessionAsLogin.2.implescureRoleRoleRoleRoleRole

Proseduralandobject-orientedprogramming (OOP) inphpdiffers significelyinstructure, kebolehgunaan semula, dandatahandling.1.ProceduralProgrammingusesFunctionsaganediediedieds, sesuai, pemodelan

PHPdoesnothaveabuilt-inWeakMapbutoffersWeakReferenceforsimilarfunctionality.1.WeakReferenceallowsholdingreferenceswithoutpreventinggarbagecollection.2.Itisusefulforcaching,eventlisteners,andmetadatawithoutaffectingobjectlifecycles.3.YoucansimulateaWe

Untuk mengendalikan muat naik fail dengan selamat di PHP, terasnya adalah untuk mengesahkan jenis fail, menamakan semula fail, dan menyekat kebenaran. 1. Gunakan finfo_file () untuk memeriksa jenis mime sebenar, dan hanya jenis tertentu seperti imej/jpeg dibenarkan; 2. Gunakan uniqid () untuk menghasilkan nama fail rawak dan simpannya dalam direktori akar bukan web; 3. Hadkan saiz fail melalui borang php.ini dan html, dan tetapkan kebenaran direktori ke 0755; 4. Gunakan Clamav untuk mengimbas malware untuk meningkatkan keselamatan. Langkah -langkah ini dengan berkesan menghalang kelemahan keselamatan dan memastikan bahawa proses muat naik fail adalah selamat dan boleh dipercayai.

Ya, PHP boleh berinteraksi dengan pangkalan data NoSQL seperti MongoDB dan Redis melalui sambungan atau perpustakaan tertentu. Pertama, gunakan pemacu MongoDBPHP (dipasang melalui PECL atau komposer) untuk membuat contoh pelanggan dan mengendalikan pangkalan data dan koleksi, penyisipan sokongan, pertanyaan, pengagregatan dan operasi lain; Kedua, gunakan perpustakaan predis atau lanjutan phpredis untuk menyambung ke REDIS, lakukan tetapan dan pengambilalihan nilai utama, dan mengesyorkan PHPREDI untuk senario berprestasi tinggi, sementara Predis mudah untuk penempatan pesat; Kedua-duanya sesuai untuk persekitaran pengeluaran dan didokumentasikan dengan baik.

Dalam PHP, perbezaan utama antara == dan == adalah ketat pemeriksaan jenis. == Penukaran jenis akan dilakukan sebelum perbandingan, contohnya, 5 == "5" pulangan benar, dan === meminta nilai dan jenis adalah sama sebelum benar akan dikembalikan, sebagai contoh, 5 === "5" mengembalikan palsu. Dalam senario penggunaan, === lebih selamat dan harus digunakan terlebih dahulu, dan == hanya digunakan apabila penukaran jenis diperlukan.

Kaedah menggunakan operasi matematik asas dalam PHP adalah seperti berikut: 1. Tanda tambahan menyokong bilangan bulat dan nombor terapung, dan juga boleh digunakan untuk pembolehubah. Nombor rentetan akan ditukar secara automatik tetapi tidak disyorkan kepada kebergantungan; 2. Tanda -tanda pengurangan - tanda, pembolehubah adalah sama, dan penukaran jenis juga terpakai; 3. Tanda -tanda pendaraban menggunakan tanda *, yang sesuai untuk nombor dan rentetan yang serupa; 4. Bahagian menggunakan / tanda, yang perlu mengelakkan pembahagian dengan sifar, dan perhatikan bahawa hasilnya mungkin nombor terapung; 5. Mengambil tanda modulus boleh digunakan untuk menilai angka ganjil dan bahkan, dan apabila memproses nombor negatif, tanda -tanda selebihnya selaras dengan dividen. Kunci untuk menggunakan pengendali ini dengan betul adalah untuk memastikan bahawa jenis data adalah jelas dan keadaan sempadan ditangani dengan baik.
