Hallo,
ich "arbeite" mit PHP seit einigen Wochen und habe vor kurzem den Schritt in die OOP gefunden. Aufgrund von fehlender Erfahrung habe ich "enorme" Defizite im Bereich der Strukturierung von OOP Projekten. Nunja, diese Defizite gedenke ich mit üben auszugleichen.
Als erstes wollte ich mich an einen erweiterbaren Authentifizierungsdienst arbeiten, welche später in ein MVC intergriert werden soll.
Der bisheriger Ansatz sieht wie folgt aus:
userRepository
+ findeOneBy($user, $hash, $state)
+ findManyByStat($stat)
+ findManyByHash($hash)
+ update($user, $hash)
+ insert($user, $hash, $state)
+ delete($user, $hash, $state)
sessionController
+ private keygen
+ initiateSession
+ validateSession
+ endSession
userAuthentification
+ authentUser
In der Umsetzung sieht das wie folgt aus:
Besonders unzufrieden bin ich mit der Umsetzung von userAuthentification und die Verwendung der Authentifizierung.
Liege ich mit meinem schlechten Gefühl da richtig?
ich "arbeite" mit PHP seit einigen Wochen und habe vor kurzem den Schritt in die OOP gefunden. Aufgrund von fehlender Erfahrung habe ich "enorme" Defizite im Bereich der Strukturierung von OOP Projekten. Nunja, diese Defizite gedenke ich mit üben auszugleichen.
Als erstes wollte ich mich an einen erweiterbaren Authentifizierungsdienst arbeiten, welche später in ein MVC intergriert werden soll.
Der bisheriger Ansatz sieht wie folgt aus:
userRepository
+ findeOneBy($user, $hash, $state)
+ findManyByStat($stat)
+ findManyByHash($hash)
+ update($user, $hash)
+ insert($user, $hash, $state)
+ delete($user, $hash, $state)
sessionController
+ private keygen
+ initiateSession
+ validateSession
+ endSession
userAuthentification
+ authentUser
In der Umsetzung sieht das wie folgt aus:
PHP-Code:
<?php namespace Authentification\core;
class userRepository {
private $db;
public function __construct($pdo) {
$this->db = $pdo;
}
public function __destruct() {
$this->db = NULL;
}
public function findOneBy($user, $hash, $stat) {
$stmt = $this->db->prepare('SELECT user, hash, status FROM user WHERE user = :user AND hash = :hash AND status = :stat');
$stmt->bindParam(':user', $user);
$stmt->bindParam(':hash', $hash);
$stmt->bindParam(':stat', $stat);
$stmt->execute();
return $stmt->fetch();
}
public function findManyByStat($stat) {
$stmt = $this->db->prepare('SELECT status FROM user WHERE status = :stat');
$stmt->bindParam(':stat', $stat);
$stmt->execute();
return $stmt->fetch();
}
public function findManyByHash($hash) {
$stmt = $this->db->prepare('SELECT hash FROM user WHERE hash = :hash');
$stmt->bindParam(':hash', $hash);
$stmt->execute();
return $stmt->fetch();
}
private function update($id, $user, $hash, $stat) {
$stmt = $this->db->prepare('UPDATE user SET user = :user, hash = :hash, stat = :stat WHERE id = :id');
$stmt->bindParam(':id', $id);
$stmt->bindParam(':user', $user);
$stmt->bindParam(':hash', $hash);
$stmt->bindParam(':stat', $stat);
$stmt->execute();
return $stmt->fetch();
}
public function insert($user, $hash, $state) {
$stmt = $this->db->prepare('INSERT INTO user (user, hash, status) VALUES (:user, :hash, :state)');
$stmt->bindParam(':user', $user);
$stmt->bindParam(':hash', $hash);
$stmt->bindParam(':stat', $stat);
$stmt->execute();
return $stmt->fetch();
}
public function delete($id) {
$stmt = $this->db->prepare('UPDATE user SET status = 0 WHERE id = :id');
$stmt->bindParam(':id', $id);
$stmt->execute();
return $stmt->fetch();
}
}
?>
PHP-Code:
<?php namespace Authentification\core;
class session {
private $key;
private function keygen() {
$extension = hash('SHA512', '?PH6gzUrt#*');
$keywrapper = str_split($extension, 64);
$legiblekey = $keywrapper[0].$_SERVER['HTTP_USER_AGENT'].$keywrapper[1];
$this->key = hash('SHA512', $legiblekey);
}
public function initiateSession() {
$this->keygen();
$_SESSION['key'] = $this->key;
$_SESSION['date'] = date('m.d.Y H:i:s');
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['host'] = $_SERVER['REMOTE_HOST'];
$_SESSION['agent'] = $_SERVER['HTTP_USER_AGENT'];
}
public function validateSession() {
$this->keygen();
if($_SESSION['key'] === $this->key) {
return TRUE;
} else {
return FALSE;
}
}
public function endSession() {
session_unset();
session_destroy();
}
}
?>
PHP-Code:
<?php namespace Authentification\core;
class userAuthentification {
private $userRepository;
private $sessionController;
public function __construct($pdo) {
$this->userRepository = new Authentifikation\core\userRepository($pdo);
$this->sessionController = new Authentification\core\sessionController;
}
public function authentUser($user, $pass) {
$hash = hash('SHA512', $pass);
if($this->userRepository->findOneBy($user, $hash, '1')) {
$this->sessionController->initiateSession();
return TRUE;
} else {
return FALSE;
}
}
}
?>
Liege ich mit meinem schlechten Gefühl da richtig?
Kommentar