Rumah > Artikel > hujung hadapan web > Pengekstrakan Objek Pengesahan Borang dan Kelas Pengesahan
Dalam projek kami sebelum ini, kami mempelajari cara log masuk atau log keluar pengguna berdaftar. Tetapi hari ini, kita akan belajar cara mengekstrak objek pengesahan borang dan mengenai pengekstrakan kelas mengesahkan dalam projek.
Untuk memulakan projek, kita perlu menambah direktori baharu bernama Http, kemudian alihkan pengawal ke dalam direktori baharu ini. Seterusnya, kita perlu menambah satu lagi direktori baharu dalam Http bernama Forms dan menambah fail baru LoginForm dalam direktori ini. Kemudian, kita perlu menjalankan projek, yang akan menunjukkan ralat kerana pengawal telah dialihkan ke direktori baharu dan laluan mereka perlu dikemas kini dalam route.php.
$router->get('/', 'index.php'); $router->get('/about', 'about.php'); $router->get('/contact', 'contact.php'); $router->get('/notes', 'notes/index.php')->only('auth'); $router->get('/note', 'notes/show.php'); $router->delete('/note', 'notes/destroy.php'); $router->get('/note/edit', 'notes/edit.php'); $router->patch('/note', 'notes/update.php'); $router->get('/notes/create', 'notes/create.php'); $router->post('/notes', 'notes/store.php'); $router->get('/register', 'registration/create.php')->only('guest'); $router->post('/register', 'registration/store.php')->only('guest'); $router->get('/login', 'session/create.php')->only('guest'); $router->post('/session', 'session/store.php')->only('guest'); $router->delete('/session', 'session/destroy.php')->only('auth');
Untuk mengekstrak objek pengesahan borang, kita perlu pergi ke session/store.php dan potong kod yang menyemak sama ada e-mel dan kata laluan yang diberikan adalah betul. Kami kemudiannya perlu mengalihkan kod ini ke fail LoginForm.php, yang terletak dalam direktori Http/Forms.
Fail LoginForm.php akan mengandungi data yang berkaitan dengan log masuk pengguna untuk mengesahkan borang dan tatasusunan ralat dilindungi yang menunjukkan ralat dalam projek
<? php namespace Http\Forms; use Core\Validator; class LoginForm { protected $errors = []; public function validate($email, $password) { if (!Validator::email($email)) { $this->errors['email'] = 'Please provide a valid email address.'; } if (!Validator::string($password)) { $this->errors['password'] = 'Please provide a valid password.'; } return empty($this->errors); } public function errors() { return $this->errors; } public function error($field, $message) { $this->errors[$field] = $message; } }
Kini kita dapat melihat projek itu berfungsi dengan baik.
Seterusnya, untuk mengekstrak kelas yang disahkan, kita perlu memilih semua segmen kod yang digunakan untuk mengesahkan pengguna, seperti menyemak e-mel dan kata laluan pengguna. Kami kemudiannya perlu menambah fail authenticator.php baharu, yang akan mengandungi kelas pengesahan yang digunakan untuk pengesahan pengguna kemudian fungsi log masuk dan log keluar telah diimport.
<?ph namespace Core; class Authenticator { public function attempt($email, $password) { $user = App::resolve(Database::class) ->query('select * from users where email = :email', [ 'email' => $email ]) ->find(); if ($user) { if (password_verify($password, $user['password'])) { $this->login([ 'email' => $email ]); return true; } } return false; } public function login($user) { $_SESSION['user'] = [ 'email' => $user['email'] ]; session_regenerate_id(true); } public function logout() { $_SESSION = []; session_destroy(); $params = session_get_cookie_params(); setcookie('PHPSESSID', '', time() - 3600, $params['path'], $params['domain'], $params['secure'], $params['httponly']); } }
Seterusnya bergerak , Kita perlu kembali ke session/store.php dan memulakan $form dan masuk untuk log masuk pengguna baharu. Kami kemudiannya perlu melaksanakan syarat if untuk menyemak sama ada borang itu sah atau tidak. Jika borang tidak sah, kami perlu mengubah hala pengguna ke laluan yang dikehendaki.
<?php use Core\Authenticator; use Http\Forms\LoginForm; $email = $_POST['email']; $password = $_POST['password']; $form = new LoginForm(); if ($form->validate($email, $password)) { if ((new Authenticator)->attempt($email, $password)) { redirect('/'); } $form->error('email', 'No matching account found for that email address and password.'); } return view('session/create.view.php', [ 'errors' => $form
Dengan membuat perubahan ini, kami boleh mengekstrak kelas yang sahih untuk menukar rupa kod kami bermakna mudah difahami dan diubah suai.
Saya harap anda telah memahaminya dengan jelas
Atas ialah kandungan terperinci Pengekstrakan Objek Pengesahan Borang dan Kelas Pengesahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!