157 Posts
Hableur
8 years ago
6
Topic

Bonjour,

après un constat effectué avec Lionel (merci Lionel), on s'est aperçu d'un certain nombre de dysfonctionnements concernant la modification de son mot de passe en frontoffice (édition du profil avec formulaire natif seblod) :

- le test de comparaison entre user password et user password2 ne fonctionne pas, si on met 2 mots de passe différents, il n'y a pas de message d'alerte.

- il n'est pas possible de modifier son mot de passe en frontoffice. Même si user password et user password 2 sont identiques, le nouveau mot de passe n'est pas sauvegardé.

- le préemplissage du champ password par le navigateur empêche la modification de tous les champs natifs joomla.

En faisant des recherches dans les forums, j'ai constaté qu'il s'agissait d'un problème ancien, mais je n'ai pas vu de solutions. Ma question est donc : comment passer outre ces anomalies ? Utiliser un champ sans rapport avec le password joomla puis le mémoriser en traitement php après le submit ? Mais alors quid de l'encodage ?

Lionel, l'idée de faire un JavaScript pour éviter le remplissage automatique du champ password ne fonctionne pas, car ce champ est rempli par le navigateur après l’exécution du JavaScript.

Comme ce problème est chronique, j'espère profiter de l'expérience de ceux qui ont résolu le problème ;) ! Merci d'avance.

nb: gloups, en fait ça ne fonctionne pas non plus en backoffice. Un super utilisateur ne peut pas modifier le mot de passe d'un user en backoffice ?!

Get a Book for SEBLOD
157 Posts
Hableur
8 years ago
0
Level 1

J'ai réglé le problème de la façon suivante :

- pour les mail, identifiant, name -> en les enregistrant dans #__users avec un script php après sauvegarde

- pour le mot de passe, j'ai travaillé sur un champ texte indépendant de password, que je valide en jQuery, et que j'enregistre après codage dans

#__users avec un script php après sauvegarde

Plus de détails pour ceux qui souhaitent.

35 Posts
julien
8 years ago
4
Level 1

Bonjour Hableur,

J'ai exactement le même soucis sur mon site. Par contre pour moi le changement de mot de passe s'effectue bien.

C'est juste le test de comparaison entre user password et user password2 qui ne fonctionne et la vérification du nombre de caractère à entrer.

Mes utilisateurs peuvent changer leur mot de passe mais si ils se trompent ils n'ont pas l'information et leur nouveau mot de passe n'est pas enregistré....

Je serai donc bien intéressé d'avoir plus de détails sur ta solution avec jQuery. Tu arrives à enregistrer ce mot de passe de manière crypté dans la table user?

8 years ago
1
Level 2

Bonjour,

Fixé sur la prochaine version 3.8.

Cordialement.

35 Posts
julien
8 years ago
0
Level 3

Encore une raison supplémentaire d'attendre cette dernière version!

Merci

157 Posts
Hableur
8 years ago
1
Level 2

Bonjour,

j'ai créé deux champs input text standards (mot_de_passe et verification_mot_de_passe) dont le contenu est comparé en jQuery.

Pour la mémorisation du mot de passe,

instruction php à l'enregistement

$user = JFactory::getUser();

/* y-a-t'il un mot de passe valide dans verification_mot_de_passe */
if (strlen($fields['verification_mot_de_passe']->value) > 7) {
$user->set('password', JUserHelper::hashPassword($fields['verification_mot_de_passe']->value));
$user->save();
JFactory::getApplication()->enqueueMessage('Votre mot de passe a été modifié.');
} else {JFactory::getApplication()->enqueueMessage("Votre mot de passe n'a pas été modifié.");}

35 Posts
julien
8 years ago
0
Level 3

Bonjour et surtout merci!

Ce code fonctionne très bien. Je partage le mien qui permet à un admin ou à l'utilisateur connecté de modifier le mot de passe en frontend et qui donne des indications au cas ou le mot de passe n'est pas enregistré. Je me passe donc du Jquery..

J'ai utilisé des champs 'mot de passe' à la place de champs texte. Cela fonctionne aussi bien.

$utilisateur=JFactory::getuser($fields['user_id']->value);
if (strlen($fields['mot_de_passe_2']->value) > 6 && $fields['mot_de_passe_2']->value==$fields['mot_de_passe']->value) {
$utilisateur->set('password', JUserHelper::hashPassword($fields['mot_de_passe_2']->value));
$utilisateur->save();
$config['message_style'] = 'message';
$config['message']="Profil et mot de passe enregistré";
}
elseif ($fields['mot_de_passe_2']->value!=$fields['mot_de_passe']->value){
$config['message_style'] = 'warning';
$config['message']="Le mot de passe n'a pas été enregistré.<br>Les champs 'mot de passe' ne sont pas les mêmes";
}
elseif (strlen($fields['mot_de_passe_2']->value)>0 && strlen($fields['mot_de_passe_2']->value)<7){
$config['message_style'] = 'warning';
$config['message']="Le mot de passe n'a pas été enregistré.<br>Il faut au moins 7 caractères";
}

Encore merci Hableur.

Get a Book for SEBLOD