Permet l'inscription d'utilisateurs
This commit is contained in:
@@ -16,4 +16,5 @@ $router->get('/^recent\/(?<page>\d+)$/', [$user, 'index']);
|
|||||||
$router->get('/^news\/(?<id>\d+)$/', [$user, 'viewPost']);
|
$router->get('/^news\/(?<id>\d+)$/', [$user, 'viewPost']);
|
||||||
$router->get('/^comments\/(?<id>[\w-]+)$/', [$user, 'viewPostComments']);
|
$router->get('/^comments\/(?<id>[\w-]+)$/', [$user, 'viewPostComments']);
|
||||||
$router->match('/^login$/', [$security, 'login']);
|
$router->match('/^login$/', [$security, 'login']);
|
||||||
|
$router->match('/^register$/', [$security, 'register']);
|
||||||
$router->run(new \Silex\DI\DI($router))->render($router, __DIR__ . '/../' . VIEW_PATH);
|
$router->run(new \Silex\DI\DI($router))->render($router, __DIR__ . '/../' . VIEW_PATH);
|
||||||
|
@@ -6,6 +6,7 @@ namespace Silex\Controller;
|
|||||||
|
|
||||||
use Silex\DI\DI;
|
use Silex\DI\DI;
|
||||||
use Silex\Http\HttpResponse;
|
use Silex\Http\HttpResponse;
|
||||||
|
use Silex\Model\User;
|
||||||
|
|
||||||
class SecurityController
|
class SecurityController
|
||||||
{
|
{
|
||||||
@@ -19,9 +20,23 @@ class SecurityController
|
|||||||
header('Location: ' . $di->getRouter()->url(''));
|
header('Location: ' . $di->getRouter()->url(''));
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
var_dump($success);
|
|
||||||
$fail = !$success;
|
$fail = !$success;
|
||||||
}
|
}
|
||||||
return HttpResponse::found('login', ['fail' => $fail]);
|
return HttpResponse::found('login', ['fail' => $fail]);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public function register(DI $di): HttpResponse
|
||||||
|
{
|
||||||
|
$fail = false;
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||||
|
$user = $di->getSecurity()->register(User::fromRawPassword($_POST['login'], $_POST['password']));
|
||||||
|
if ($user !== null) {
|
||||||
|
http_response_code(303);
|
||||||
|
header('Location: ' . $di->getRouter()->url(''));
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
$fail = $user === null;
|
||||||
|
}
|
||||||
|
return HttpResponse::found('register', ['fail' => $fail]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -33,4 +33,12 @@ class UserGateway
|
|||||||
$user = $req->fetch();
|
$user = $req->fetch();
|
||||||
return $user === false ? null : $user;
|
return $user === false ? null : $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function insert(User $user): bool
|
||||||
|
{
|
||||||
|
$req = $this->pdo->prepare('INSERT INTO registered_user (login, password, role) VALUES (:login, :password, :role);');
|
||||||
|
$req->execute(['login' => $user->getLogin(), 'password' => $user->getPasswordHash(), 'role' => $user->getRole()]);
|
||||||
|
$user->setId(intval($this->pdo->lastInsertId()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,11 +11,12 @@ class User
|
|||||||
private string $password;
|
private string $password;
|
||||||
private int $role;
|
private int $role;
|
||||||
|
|
||||||
public static function fromRawPassword(string $login, string $password): User
|
public static function fromRawPassword(string $login, string $password, int $role = 0): User
|
||||||
{
|
{
|
||||||
$user = new User();
|
$user = new User();
|
||||||
$user->login = $login;
|
$user->login = $login;
|
||||||
$user->password = password_hash($password, PASSWORD_DEFAULT);
|
$user->password = password_hash($password, PASSWORD_DEFAULT);
|
||||||
|
$user->role = $role;
|
||||||
return $user;
|
return $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,4 +39,9 @@ class User
|
|||||||
{
|
{
|
||||||
return $this->role;
|
return $this->role;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setId(int $id)
|
||||||
|
{
|
||||||
|
$this->id_user = $id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -45,4 +45,14 @@ class Security
|
|||||||
}
|
}
|
||||||
return $this->user;
|
return $this->user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function register(User $user): ?User
|
||||||
|
{
|
||||||
|
if (!$this->userGateway->insert($user)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$this->session[USER] = $user->getId();
|
||||||
|
$this->user = $user;
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -12,13 +12,13 @@
|
|||||||
<div class="field">
|
<div class="field">
|
||||||
<label class="label" for="login">Login</label>
|
<label class="label" for="login">Login</label>
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<input class="input" type="text" id="login" name="login">
|
<input class="input" type="text" id="login" name="login" autocomplete="username">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label class="label" for="password">Password</label>
|
<label class="label" for="password">Password</label>
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<input class="input" type="password" id="password" name="password">
|
<input class="input" type="password" id="password" name="password" autocomplete="current-password">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
36
views/register.php
Normal file
36
views/register.php
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?php if ($params['fail']) : ?>
|
||||||
|
<article class="message is-danger">
|
||||||
|
<div class="message-header">
|
||||||
|
<p>Registration failed</p>
|
||||||
|
</div>
|
||||||
|
<div class="message-body">
|
||||||
|
Login is already taken.
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
<?php endif ?>
|
||||||
|
<form action="<?= $_SERVER['REQUEST_URI'] ?>" method="post">
|
||||||
|
<div class="field">
|
||||||
|
<label class="label" for="login">Login</label>
|
||||||
|
<div class="control">
|
||||||
|
<input class="input" type="text" id="login" name="login" autocomplete="username">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<label class="label" for="password">Password</label>
|
||||||
|
<div class="control">
|
||||||
|
<input class="input" type="password" id="password" name="password" autocomplete="new-password">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<label class="label" for="password-confirmation">Password confirmation</label>
|
||||||
|
<div class="control">
|
||||||
|
<input class="input" type="password" id="password-confirmation" name="password-confirmation" autocomplete="new-password">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<div class="control">
|
||||||
|
<button class="button is-link">Submit</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
Reference in New Issue
Block a user