Connexion et session en MVC
Bonjour,
J'ai actuellement un blocage dans mon projet en cours. J'ai compris ce que je devais faire mais après de multiples essais ça ne fonctionne pas.. du coup j'ai tout effacé :mrgreen: (enfin une partie ahaha).
En gros, le formulaire d'inscription fonctionne bien, la bdd se remplit avec le mdp hashé, tout est ok.
Maintenant, pour lancer une session avec le formulaire de connexion, ça coince... J'ai mis en commentaire dans le code (dans function connexion()) ce que j'ai compris de ce que je devais faire, mais je coince.. si quelqu'un peut m'éclairer.
Alors côté modèle, dans mon login manager j'ai ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class LoginManager
{
public function registerUser($username, $password)
{
$pass_hache = password_hash($password, PASSWORD_DEFAULT);
$db = $this->dbConnect();
$login = $db->prepare('INSERT INTO user(username, password, FKtype_user) VALUES(?, ?, 2)');
$affectedLines = $login->execute(array($username, $pass_hache));
return $affectedLines;
}
public function sessionUser($username)
{
$db = $this->dbConnect();
$login = $db->prepare('SELECT id, password FROM user WHERE username= ?');
$login->execute(array($username));
return $login;
}
// Connexion à la BDD
private function dbConnect()
{
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$database = "xxx";
$db = new PDO("mysql:host=$servername;dbname=$database", $username, $password);
return $db;
}
} |
Coté contrôleur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
function addUser($username, $password)
{
$loginManager = new LoginManager();
$affectedLines = $loginManager->registerUser($username, $password);
if ($affectedLines === false) {
// Erreur gérée. Elle sera remontée jusqu'au bloc try du routeur !
echo "<script>alert(\"Inscription impossible ! Le pseudo que vous tentez de prendre est peut-être déjà utilisé....\");
document.location.href = '/index.php?action=newUser'</script>";
}
else {
echo "<script>alert(\"Vous êtes maintenant inscrit ! Veuillez vous connecter.\");
document.location.href = '/index.php?action=connexion'</script>";
}
}
function connexion($username, $passwordform)
{
$loginManager = new LoginManager();
$login = $loginManager->sessionUser($username);
//Si rien dans $login = infos non récupérées dans BDD donc user n'existe pas
//Si infos dans $login = user existe -> vérifier mot de passe
//Si mdp ok, lancer $_SESSION !
}
function deconnexion()
{
$_SESSION = array();
session_destroy();
header('Location: /index.php?action=connexion');
exit;
} |
Côté routeur (je mets tout le bloc) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| <?php
session_start();
require('./controleurs/controller.php');
try { // On essaie de faire des choses
if (isset($_GET['action'])) {
if ($_GET['action'] == 'listPosts') {
listPosts();
}
elseif ($_GET['action'] == 'post') {
if (isset($_GET['id']) && $_GET['id'] > 0) {
post();
}
else {
// Erreur ! On arrête tout, on envoie une exception, donc au saute directement au catch
throw new Exception('Aucun identifiant de billet envoyé');
}
}
elseif ($_GET['action'] == 'addComment') {
if (isset($_GET['id']) && $_GET['id'] > 0) {
if (!empty($_POST['author']) && !empty($_POST['content'])) {
addComment($_GET['id'], $_POST['author'], $_POST['content']);
}
else {
// Autre exception
throw new Exception('Tous les champs ne sont pas remplis !');
}
}
else {
// Autre exception
throw new Exception('Aucun identifiant de billet envoyé');
}
}
elseif ($_GET['action'] == 'newArticle') {
viewAddArticle();
}
elseif ($_GET['action'] == 'addArticle') {
if (!empty($_POST['title']) && !empty($_POST['content'])) {
addArticle($_POST['title'], $_POST['content']);
}
else {
// Autre exception
throw new Exception('Tous les champs ne sont pas remplis !');
}
}
elseif ($_GET['action'] == 'newUser') {
viewAddUser();
}
elseif ($_GET['action'] == 'addUser') {
if (!empty($_POST['username']) && !empty($_POST['password'])) {
addUser($_POST['username'], $_POST['password']);
}
else {
// Autre exception
throw new Exception('Tous les champs ne sont pas remplis !');
}
}
elseif ($_GET['action'] == 'connexion') {
viewConnexion();
}
elseif ($_GET['action'] == 'checkconnexion') {
if(!empty($_POST['username']) && !empty($_POST['password'])){
connexion($_POST['username'], $_POST['password']);
}
else {
//erreur
throw new Exception('Tous les champs ne sont pas remplis !');
}
}
elseif ($_GET['action'] == 'deconnexion') {
deconnexion();
}
elseif ($_GET['action'] == 'listPostsAdmin') {
listPostsAdmin();
}
}
else {
listPosts();
}
}
catch(Exception $e) { // S'il y a eu une erreur, alors...
echo 'Erreur : ' . $e->getMessage();
} |
Je n'ai pas mis le code de la vue mais je peux le mettre si besoin.
Merciii