2 votes

Ajout d'un "faux" champ au formulaire d'ajout/modification de grocerycrud

Dans ma table des utilisateurs, j'ai un champ "hashed_password" de 128 caractères. Dans mon User_model, j'ai des fonctions pour crypter et décrypter le mot de passe. Lors du cryptage, je génère aléatoirement un sel qui est stocké dans les 64 premiers caractères du champ hashed_password. Le résultat du mot de passe haché est stocké dans les 64 derniers caractères. Lors du décryptage, je fais l'inverse.

Comme je suppose que c'est presque universel, il n'y a jamais de mot de passe en clair à afficher.

Ainsi, lorsque mes utilisateurs (via grocery_CRUD) ajoutent/modifient un utilisateur, j'ai pensé qu'il était possible d'inclure faux champs : "password" et "passconf" dans les formulaires d'ajout et de modification avec les éléments suivants :

$crud->fields('username', ... <other fields> ... 'password', 'passconf');

Pour que tout soit bien clair, les champs "password" et "passconf" N'EXISTENT PAS dans ma table des utilisateurs. Je veux simplement que mes utilisateurs saisissent le nouveau mot de passe à cet endroit, puis le traitent à ma façon.

Mais ça ne marche pas. Je veux dire que le formulaire d'ajout/modification s'affiche correctement avec les deux faux champs (la validation ci-dessous fonctionne correctement), mais si j'essaie de mettre à jour d'autres informations sur l'utilisateur, puis de mettre à jour les modifications, cette action échoue avec le graphique "Loading" qui s'affiche brièvement mais ne met pas à jour la base de données.

J'ai essayé de reproduire cela sur un formulaire TRES simple grocery_CRUD sans autre complexité et j'obtiens le même comportement : le formulaire s'affiche correctement mais ne met pas à jour la base de données.

Est-il possible d'utiliser faux champs ? Est-ce qu'il me manque quelque chose ?

Est-ce que grocery_CRUD essaie de faire quelque chose avec ces champs en coulisse qui fait échouer la mise à jour de la base de données ?

J'avais alors l'espoir de faire ce qui suit :

$crud->set_rules('password', 'Password', 'callback_valid_password');
$crud->set_rules('passconf', 'Password Confirmation', 'matches[password]');

$crud->callback_before_insert(array($this,'encrypt_password_callback'));
$crud->callback_before_update(array($this,'encrypt_password_callback'));

function encrypt_password_callback($post_array, $primary_key = null){
    if ($post_array['password'] <> '') {
        $this->User_model->set_password($post_array['username'], $post_array['password']);
    }
}

function valid_password($str) {
    //do some pw validation
    return TRUE;
}

2voto

Kenilik Points 266

J'ai résolu ce problème en utilisant des rappels d'insertion et de mise à jour, en cryptant le mot de passe et en désactivant les champs "password" et "passconf" avant l'insertion ou la mise à jour de la base de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X