>  기사  >  웹 프론트엔드  >  Form Validation 객체 추출 및 Authenticate 클래스

Form Validation 객체 추출 및 Authenticate 클래스

WBOY
WBOY원래의
2024-07-18 12:25:38959검색

Extraction of Form Validation Object and Authenticate Class

이전 프로젝트에서는 등록된 사용자를 로그인하거나 로그아웃하는 방법을 배웠습니다. 하지만 오늘은 프로젝트에서 Form Validation 객체를 추출하는 방법과 인증 클래스를 추출하는 방법에 대해 알아보겠습니다.

VS 코드 측

프로젝트를 시작하려면 Http라는 새 디렉터리를 추가한 다음 컨트롤러를 이 새 디렉터리로 이동해야 합니다. 다음으로 Http에 Forms라는 또 다른 새 디렉터리를 추가하고 이 디렉터리에 LoginForm이라는 새 파일을 추가해야 합니다. 그런 다음 프로젝트를 실행해야 합니다. 컨트롤러가 새 디렉터리로 이동되었고 해당 경로가 Routes.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');

양식 유효성 검사 개체 추출

양식 유효성 검사 개체를 추출하려면 session/store.php로 이동하여 제공된 이메일과 비밀번호가 올바른지 확인하는 코드를 잘라내야 합니다. 그런 다음 이 코드를 Http/Forms 디렉토리에 있는 LoginForm.php 파일로 이동해야 합니다.

로그인 양식

LoginForm.php 파일에는 양식을 검증하기 위한 사용자 로그인과 관련된 데이터와 프로젝트의 오류를 가리키는 보호된 오류 배열이 포함됩니다.

<? 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;
  }
}

이제 프로젝트가 잘 진행되고 있는 것을 볼 수 있습니다.

인증 클래스 추출

다음으로 인증 클래스를 추출하려면 사용자의 이메일과 비밀번호를 확인하는 등 사용자를 인증하는 데 사용되는 모든 코드 세그먼트를 선택해야 합니다. 그런 다음 사용자 인증에 사용되는 인증 클래스를 포함하고 로그인 및 로그아웃 기능을 가져오는 새 파일 authenticater.php를 추가해야 합니다.

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

세션 저장소 파일 업데이트

더 나아가서 session/store.php로 돌아가서 새 사용자 로그인을 위해 $form과 in을 초기화해야 합니다. 그런 다음 양식이 유효한지 확인하기 위해 if 조건을 구현해야 합니다. 양식이 유효하지 않으면 사용자를 원하는 경로로 리디렉션해야 합니다.

<?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

이러한 변경을 통해 인증 클래스를 추출하여 코드 모양을 변경할 수 있으므로 이해하고 수정하기 쉽습니다.

명확하게 이해하셨기를 바랍니다

위 내용은 Form Validation 객체 추출 및 Authenticate 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.