이전 프로젝트에서는 등록된 사용자를 로그인하거나 로그아웃하는 방법을 배웠습니다. 하지만 오늘은 프로젝트에서 Form Validation 객체를 추출하는 방법과 인증 클래스를 추출하는 방법에 대해 알아보겠습니다.
프로젝트를 시작하려면 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!