Heim  >  Artikel  >  Web-Frontend  >  Extraktion des Formularvalidierungsobjekts und der Authentifizierungsklasse

Extraktion des Formularvalidierungsobjekts und der Authentifizierungsklasse

WBOY
WBOYOriginal
2024-07-18 12:25:38959Durchsuche

Extraction of Form Validation Object and Authenticate Class

In unserem vorherigen Projekt haben wir gelernt, wie man einen registrierten Benutzer anmeldet oder abmeldet. Aber heute lernen wir, wie man ein Formularvalidierungsobjekt extrahiert und wie man die Klassenextraktion im Projekt authentifiziert.

Auf der VS-Code-Seite

Um das Projekt zu starten, müssen wir ein neues Verzeichnis namens Http hinzufügen und dann die Controller in dieses neue Verzeichnis verschieben. Als nächstes müssen wir ein weiteres neues Verzeichnis in Http mit dem Namen „Forms“ hinzufügen und in diesem Verzeichnis eine neue Datei „LoginForm“ hinzufügen. Dann müssen wir das Projekt ausführen, das einen Fehler anzeigt, da die Controller in ein neues Verzeichnis verschoben wurden und ihre Routen in „routes.php“ aktualisiert werden müssen.

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

Formularvalidierungsobjekt extrahieren

Um ein Formularvalidierungsobjekt zu extrahieren, müssen wir zu session/store.php gehen und den Code ausschneiden, der prüft, ob die angegebene E-Mail-Adresse und das Passwort korrekt sind. Anschließend müssen wir diesen Code in die Datei LoginForm.php verschieben, die sich im Verzeichnis Http/Forms befindet.

Anmeldeformular

Die Datei LoginForm.php enthält Daten zur Benutzeranmeldung zur Validierung von Formularen und ein geschütztes Fehlerarray, das auf Fehler im Projekt hinweist

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

Jetzt können wir sehen, dass das Projekt gut funktioniert.

Authentifizieren-Klasse extrahieren

Um eine Authentifizierungsklasse zu extrahieren, müssen wir als Nächstes alle Codesegmente auswählen, die zur Authentifizierung des Benutzers verwendet werden, z. B. zur Überprüfung der E-Mail-Adresse und des Kennworts des Benutzers. Anschließend müssen wir eine neue Datei „authenticator.php“ hinzufügen, die eine Authentifizierungsklasse enthält, die für die Benutzerauthentifizierung verwendet wird. Anschließend wurden Anmelde- und Abmeldefunktionen importiert.

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

Sitzungsspeicherdatei aktualisieren

Im weiteren Verlauf müssen wir zu session/store.php zurückkehren und das $form initialisieren und für die neue Benutzeranmeldung eintreten. Anschließend müssen wir eine if-Bedingung implementieren, um zu prüfen, ob das Formular gültig ist oder nicht. Wenn das Formular nicht gültig ist, müssen wir den Benutzer auf den gewünschten Pfad umleiten.

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

Durch diese Änderungen können wir eine Authentifizierungsklasse extrahieren, um das Aussehen unseres Codes zu ändern, sodass er einfacher zu verstehen und zu ändern ist.

Ich hoffe, dass Sie es klar verstanden haben

Das obige ist der detaillierte Inhalt vonExtraktion des Formularvalidierungsobjekts und der Authentifizierungsklasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Wie schreibe ich besseres CSS?Nächster Artikel:Wie schreibe ich besseres CSS?