Comment avoir plusieurs identifiants admin?

JordanP31
Invité n'ayant pas de compte PHPfrance

12 janv. 2016, 15:53

Bonjour,

Dans le cadre d'un TD, je dois réalisé un site web en PHP mais je suis bloqué à une question qui dit : Il n'y a actuellement qu'un seul identifiant (admin/password) dans le fichier de configuration. Modifiez sa structure pour pouvoir y placer facilement plusieurs identifiants valides pour devenir administrateur (comme admin1/password1 et admin2/password2).

Voici le code en question à modifier :
Pour celui-ci juste la partie admin
<?php

return [
    // Database
    'database' => [
        'engine' => 'mysql',
        'host' => 'info-arie',
        'database' => 'info_jpuissegur',
        'user' => 'jpuissegur',
        'password' => 'GZdAuBc1n6Oa'
    ],

    // Administrator auth
    'admin' => ['admin', 'password']
];
$app->match('/admin', function() use ($app) {
    $request = $app['request'];
    $success = false;
    if ($request->getMethod() == 'POST') {
        $post = $request->request;
        if ($post->has('login') && $post->has('password') &&
            array($post->get('login'), $post->get('password')) == $app['config']['admin']) {
            $app['session']->set('admin', true);
            $success = true;
        }
    }
Je n'y arrive pas étant donné que je débute. Quelqu'un peut m'aider svp ?

Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

12 janv. 2016, 16:29

Bonjour et bienvenue sur PHPfrance !

Qu'as-tu essayé ?
Où bloques-tu ? Qu'est-ce qui ne fonctionne pas ?
Quand tout le reste a échoué, lisez le mode d'emploi...

JordanP31
Invité n'ayant pas de compte PHPfrance

12 janv. 2016, 16:34

J'ai essayé ça :
// Administrator auth
    'admin' => ['admin', 'password']
    'admin2' => ['admin2', 'password2']
mais ça ne marche pas.

On m'a dit de modifier le cette partie en fonction :
if ($post->has('login') && $post->has('password') &&
            array($post->get('login'), $post->get('password')) == $app['config']['admin']) {
            $app['session']->set('admin', true);
            $success = true;
        }
    }
mais je vois pas quoi modifier, je suis très novice donc j'ai beaucoup de mal.

JordanP31
Invité n'ayant pas de compte PHPfrance

12 janv. 2016, 16:36

*de modifier cette partie en rajoutant un if et modifier le premier

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 janv. 2016, 11:42

mais ça ne marche pas.
Ce qui est bien en informatique, c'est que ça fonctionne toujours. Le résultat obtenu n'est pas nécessairement celui que tu attends, mais il y a toujours un résultat, un message d'erreur, un comportement ou quelque chose qui va te permettre de comprendre ce qui te manque ou là où tu t'es trompé :)

C'est grâce à ces informations que l'on peut débugger un code. Si le serveur se contentais de répondre "Ça marche pas", l'informatique n'aurait jamais décollé ;)


Pour en revenir à ton problème il faut comprendre ce que fait le code que tu utilises, sinon tu ne pourras jamais savoir ce qu'il faut modifier. Pour le moment tu as ajouté dans ton tableau un second enregistrement "admin2", avec ce qu'on imagine être son login "admin2" et son mot de passe "password2".

Maintenant que ton user est déclaré, il faut que lorsque quelqu'un se connecte, tu ailles vérifier s'il s'agit de admin ou admin2, et si le mot de passe spécifié correspond à celui que tu attends.

Actuellement ton code sert à :
if ($post->has('login') && $post->has('password') && // Test si on reçoit un formulaire en POST avec les champs "login" et "password"
            array($post->get('login'), $post->get('password')) == $app['config']['admin']) { // Test si lorsque l'on constitue un tableau avec le login et le password récupéré du formulaire et qu'on le compare au tableau contenant un login/mot de passe de $app['config']['admin'] on trouve le même résultat.
            $app['session']->set('admin', true);
            $success = true;
        }
    }
Il te faut donc étendre le test pour ne pas uniquement aller comparer les identifiants associés à $app['config']['admin'], mais à tous ceux des admins que tu auras spécifié dans ta configuration.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...