フォーム検証オブジェクトと認証クラスの抽出

WBOY
リリース: 2024-07-18 12:25:38
オリジナル
890 人が閲覧しました

Extraction of Form Validation Object and Authenticate Class

前のプロジェクトでは、登録済みユーザーにログインまたはログアウトする方法を学習しました。ただし、今日は、フォーム検証オブジェクトを抽出する方法と、プロジェクトでのクラス抽出の認証について学びます。

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;
  }
}
ログイン後にコピー

これで、プロジェクトがうまく機能していることがわかります。

認証クラスの抽出

次に、認証クラスを抽出するには、ユーザーの電子メールとパスワードの確認など、ユーザーの認証に使用されるすべてのコード セグメントを選択する必要があります。次に、新しいファイルauthenticator.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 を初期化する必要があります。次に、フォームが有効かどうかを確認するための 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
ログイン後にコピー

これらの変更を行うことで、認証クラスを抽出してコードの外観を変更できるため、理解しやすく、変更しやすくなります。

しっかりと理解していただけたと思います

以上がフォーム検証オブジェクトと認証クラスの抽出の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!