Rumah  >  Artikel  >  hujung hadapan web  >  Pengekstrakan Objek Pengesahan Borang dan Kelas Pengesahan

Pengekstrakan Objek Pengesahan Borang dan Kelas Pengesahan

WBOY
WBOYasal
2024-07-18 12:25:38959semak imbas

Extraction of Form Validation Object and Authenticate Class

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.

Di Sebelah Kod VS

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');

Ekstrak Objek Pengesahan Borang

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.

Borang Log Masuk

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.

Ekstrak Kelas Pengesahan

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']);
  }
}

Kemas kini fail stor sesi

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn