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;
}