Modif MDP Site Public

Plugin facilitant la modification du mot de passe depuis le site public (pour les visiteurs identifiés donc)

Si comme moi vous utilisez le plugin « accès res­treint » avec des visiteurs identifiés [1], vous risquez alors d’avoir la même question :

« Comment je fais pour changer le mot de passe barbare ? »

Ce plugin est la réponse et vous permettra de fabriquer une page de modification de mot de passe.

Le Plugin pret à l’emploi V0.4
Génération GUID incluse

Comment ça marche ?

Ce plugin s’appuie sur la fonctionnalité de « mot de passe » oublié en « court-circuitant » l’étape saisie d’adresse courriel puis clique sur le lien envoyé. Lors de l’appel à la balise #URL_NOUVMDP, la zone « cookie_oubli » est initialisée, ce qui correspond à la fonctionnalité de la page « oubli de mot de passe ». Puis l’URL qu’aurait donné l’envoi de mail est retourné par la balise.

Mise en œuvre

La mise en œuvre est assez simple, une nouvelle balise est créée #URL_NOUVMDP à la quelle vous précisez la page de modification du mot de passe. Cette page est celle dans le courriel d’oublis de mot de passe.
Si vous omettez la page la valeur par défaut sera la page de mot de passe pour SPIP 2.0.3 soit ’spip_pass’ .

Donc #URL_NOUVMDP & #URL_NOUVMDP{’spip_pass’} sont équivalents.

Exemple

Dans mon menu, si l’utilisateur est connecté alors alors on lui propose un lien de modification du mot de passe à l’aide du code suivant :

[(#SESSION{id_auteur}|?{' '})
<a href="[(#URL_PAGE{Modif_MdP_Public})]">Modifier mot de passe</a>
]

Dans cette page Modif_MdP_Public, j’explique à l’utilisateur son action et lui demande de la confirmer à l’aide du code suivant :

Version SPIP 2.0 balise #SESSION

[Vous êtes connecté en tant que<br />'<b>(#SESSION{'nom'})</b>' <br />
Etes vous sur de vouloir changer de mot de passe ?<br />
<a href="#URL_NOUVMDP">OUI</a>&nbsp;&nbsp;
<a href="#URL_PAGE{sommaire}">NON</a>]

Version SPIP 1.9x balise #AUTEUR_SESSION (dans le plugin)

[Vous êtes connecté en tant que<br />'<b>(#AUTEUR_SESSION{'nom'})</b>' <br />
Etes vous sur de vouloir changer de mot de passe ?<br />
<a href="#URL_NOUVMDP">OUI</a>&nbsp;&nbsp;
<a href="#URL_PAGE{sommaire}">NON</a>]

Notes

N’oubliez surtout pas dans la page où vous utilisez la balise de ce plug-in de déactiver le cache avec :

#CACHE{0}

Historique

Version 0.4 : Génération GUID dans le plug-in pour palier à des cas de bugs quand ’alea_futur’ est vide dans la fiche utilisateur

Version 0.3 : Correction pour fonctionnement 2.0

Le Plugin pret à l’emploi V0.3
OK SPIP 2.0
OK SPIP 1.9

Version 0.2 : Adaptation pour version 1.9 et version 2.0 (KO pour 2.0)

Le Plugin pret à l’emploi V0.2
KO SPIP 2.0
OK SPIP 1.9

Version 0.1 : Pour version 2.0 uniquement

Le Plugin pret à l’emploi V0.1
OK SPIP 2.0
KO SPIP 1.9

Remerciements

Marjorie pour ses tests en version 0.2.


Notes

[1Pour rappel les visiteurs identifiés correspondent à l’option suivante d’activée dans « Configuration du Site » >> « Interactivité » :
Enregistrement obligatoire (les utilisateurs doivent s’abonner en fournissant leur adresse e-mail avant de pouvoir poster des contributions).

Discussion

10 discussions

  • Emmanuel

    Bonjour,
    Est-ce que quelqu’un a essayé ce plugin avec SPIP 3 ? Ou aurait une alternative pour permettre aux visiteurs de modifier leur mot de passe ?
    Merci d’avance,

    Répondre à ce message

  • Bonjour,

    Le plugin fonctionne-t-il avec SPIP 2.1.12 ?
    Je n’arrive pas à le faire fonctionner correctement.

    Je peux faire la manip une fois, si je vide le cache avant uniquement. Ensuite, impossible de changer le mot de passe une seconde fois.

    a+

    Répondre à ce message

  • Marc,

    A priori la balise n’a pas fonctionnée.
    Peux tu vérifié que l’URL est bien :
    http://[tonsite]/spip.php ?page=spip_pass&p=BAEC.....850D91

    Où BAEC.....850D91 représente le lien avec la fiche utilisateur.
    Si tu as une URL du type http://[tonsite]/spip.php ?page=spip_pass&p=

    c’est que la génération de l’identifiant n’a pas marcher. Utilise la nouvelle version V0.4 que j’avais pas eu le temps de valider ailleur que chez moi.

    Ca devrait peut-etre résoudre ton problème.

    Répondre à ce message

  • Marc VALLETEAU de mOULLIAC

    Bonjour, j’ai installé ce plugin sur un spip 209 et n’ai probablement pas compris à quoi il servait !! En effet, en suivant les instructions, lorsque j’arrive sur la page modif_mdp.html que j’ai crée, et inséré le code proposé

    <p>Vous êtes connecté sous le nom de : [(#SESSION{'nom'})]</p>
    			<p>Etes-vous sûr de vouloir modifier votre mot de passe ?</p>
    			<p><a href="#URL_NOUVMDP">OUI</a><p>
    			<p><a href="#URL_PAGE{sommaire}">NON</a><p>

    en cliquant sur ’OUI’, on arrive sur la page de spip, spip_pass, où il est demandé, non pas un nouveau mot de passe, mais de saisir une adresse mail pour recevoir un nouveau mot de passe ...

    Cela fait donc double emploi avec le lien « mot de passe oublié » sur le formulaire d’identification ...

    Ai-je raté quelque chose ? Merci.

    Marc

    Répondre à ce message

  • Bonjour,

    Merci pour ce plugin.
    Je l’ai installé sur l’un de mes sites de test mais si quelqu’un change son mdp, lorsque quelqu’un d’autre veut changer le sien, il a le message :
    Erreur : ce code ne correspond à aucun des visiteurs ayant accès à ce site.
    Si je vide le cache dans l’espace privé ou si je recalcule ma page avant de cliquer sur « chnger de mot de passe », le pb ne se pose pas.

    J’ai mis dans mon fichier auteur.html qui contient le code
    [(#SESSIONid_auteur|==#ID_AUTEUR| ?’ ’)

    Mot de Passe : (le modifier ?)

    ]
    sur la première ligne :
    #CACHE0

    Si par exemple, après avoir vidé le cache, je m’identifie en tant que auteur 1 et que j’appelle la page spip.php ?auteur1, on me propose bien de changer de mot de passe. Je clique dessus et le formulaire apparait pour le changer. Ca marche...
    Si ensuite je me déconnecte en tant qu’auteur 1 et m’identifie en tant qu’auteur2, en allant sur spip.php ?auteur2, on me propose bien de changer de mot de passe mais si je clique dessus, j’ai le message d’érreur ci-dessus.
    Si par contre entre les 2 essais, je vide le cache, ça marche (le formulaire apparait plutôt que le message d’erreur, quand je clique sur « le modifier »)

    C’est comme si il ne prenait pas en compte la commande #CACHE0. Auriez-vous une explication ?

    (A noter que ce pb se pose que j’ai sélectionné la lame du CS « pas de cache » ou pas)

    Merci pour votre aide

    Boby

    PS : je suis en 1.92g

    Répondre à ce message

  • Tout d’abord ce que je n’avais pas écrit avant (mais qui est important) : merci pour ce morceau de code.

    J’administre un site d’association gérant des accès restreints où les visiteurs identifiés sont des adhérents. Pour la raison pratique déjà évoquée dans ce forum, mais aussi pour des raisons éthiques et de confidentialité, je pense que les visiteurs doivent avoir le doit de choisir et de changer leur mot de passe. Une « lacune » de spip est donc comblée.

    Sur le sujet qui m’intéressait, je confirme que c’est bien la première ligne trouvée de la table auteurs correspondant à l’adresse électronique fournie qui est utilisée (pas forcément l’auteur le plus ancien).

    Si deux personnes utilisent la même adresse électronique, ça risque donc de créer quelques surprises. Je ne connais pas les raisons qui conduisent à cette « tolérance » de spip sur les adresses électroniques (cette tolérance pourrait être activée ou non par une case à cocher).

    En passant par l’intermédiaire d’un modérateur pour les inscriptions ou en modifiant le formulaire de spip, on peut recopier l’adresse électronique dans le champ login : lorsque deux logins sont identiques lors de la création, spip n’envoie aucun message d’erreur mais la deuxième personne a son login vide et apparait dans la liste avec une petite croix rouge ; c’est une façon d’assurer son unicité.

    Répondre à ce message

  • 1

    Bon ce n’est certainement pas le bon forum. Il y a un problème de conception (pas du plugin, de spip) ou alors y a un truc qui m’échappe.

    Dans la base des auteurs/visiteurs spip accepte que la même adresse electronique soit utilisée plusieurs fois avec des personnalités différentes.

    Quand la procédure de changement de mot de passe est lancée (qu’elle soit d’origine ou modifiée par ce plugin), elle utilise l’adresse electronique et non le login ; donc : comment différencer les personnalités qui utilisent la même adresse electronique ? (en fait seule la première des personnalités à accès à la procédure)

    • pour répondre à :

      Quand la procédure de changement de mot de passe est lancée (qu’elle soit d’origine ou modifiée par ce plugin), elle utilise l’adresse electronique et non le login ; donc : comment différencer les personnalités qui utilisent la même adresse electronique ? (en fait seule la première des personnalités à accès à la procédure)

      Le plugin n’utilise pas du tout l’adresse courriel. En effet on récupère l’ID de l’utilisateur qui est dans sa session. Ceci est fait dans le code suivant :

      // Sécurité sur session ouverte
      	If ( $auteur_session == NULL ) return $p ;
      	If ( $auteur_session['id_auteur'] == NULL ) return $p ;
      	If ( $auteur_session['id_auteur'] <= 0 ) return $p ;

      Ensuite la zone cookie_oubli de la table auteurs est modifié pour l’utilisateur identifié par son ID. Ceci est fait dans le code suivant :

      sql_updateq($t_prefix . 'auteurs', array('cookie_oubli' => $C_Id), 'id_auteur='.$auteur_session['id_auteur']);

      Donc le plug-in ne doit prendre en compte qu’un seul et unique utilisateur, celui qui est connecté. Je te laisse faire le teste.

      Tu devrais facilement pouvoir vérifier cela en consultant la table auteurs et ses changements lors que le lien pour changer ton mot de passe apparait car à ce moment la l’opération est déjà faite dans la base.

      Pour répondre à ta question ou du moins te donner des pistes, le lien reçu par mail contient la zone cookie_oubli donc un fois ton mail reçu tu peux aller consulter la table auteur pour identifier de quel auteur on parle.

      Je pense, sans en être sur, que lorsque l’on fait appel à la fonction SPIP d’oubli de mot de passe, il recherche la première entrée. Première au sens de la base de donnée, c’est à dire que cela dépend des index du stockage de la base et que cela peut changer dans le temps. L’idéal serait de faire une boucle et d’envoyer plusieurs mails si plusieurs comptes.

      Taryck.

    Répondre à ce message

  • 6

    au départ,j’avais juste exec= puis rien dans l’adresse (je suis en 2.0.5), désormais j’ai « exec=pass », on progresse. Par contre, ça me dit « fichier pass introuvable » désormais... arf....

    • Cela signifie que la modification de la base de donnée n’a pas eu lieu.

      Votre url contient bien un « p=xxxx » ?

      Avez vous un accès à la base de donnée ? phpadmin par exemple ?

      Le plus simple serait d’échanger par mail des captures écrans.

      Taryck.

    • oui je confirme, il y a bien un p=.... (plus un long code de chiffres avec un point).

    • Et les autres questions :

      Avez vous un accès à la base de donnée ? phpadmin par exemple ?

      Le plus simple serait d’échanger par mail (taryck@bensiali.net) des captures écrans.

      Car sinon je ne peux pas analyser le problème...

      Taryck.

    • Bernard Blazin

      Il y a semble t’il un erreur dans les fonctions du plugin en ligne 81 du moins dans ma version du plugin :
      $p->param[0][2][0]->texte = $p->param[0][2][0]->texte. "&action=".$p->param[0][1][0]->texte;

      A remplacer par
      $p->param[0][2][0]->texte = $p->param[0][2][0]->texte. "&amp;page=".$p->param[0][1][0]->texte;

      Sinon sous SPIP 2.0.3 je ne passais pas :)

    • Le code contient les 2 versions de code.

      1 pour SPIP 1.9.x et une pour SPIP 2.x

      	if (version_compare($spip_version_code,'2.','<')) {
      // cookie_oubli n'existe pas ni alea_future dans $auteur_session
      		include_spip('base/abstract_sql');
       		if ( $table_prefix != '' ) $t_prefix = $table_prefix . "_";
      		$row = sql_fetsel(array('cookie_oubli', 'alea_futur'), $t_prefix . 'auteurs', 'id_auteur='.$auteur_session['id_auteur']);
        	If ( $row['cookie_oubli'] != '' ) {
      	  	$C_Id = $row['cookie_oubli'];
      //  		echo 'cookie_oubli' . $row['cookie_oubli'];
        	} else {
      	  	$C_Id = $row['alea_futur'];
      //  		echo 'alea_futur' . $row['alea_futur'];
      			sql_updateq($t_prefix . 'auteurs', array('cookie_oubli' => $C_Id), 'id_auteur='.$auteur_session['id_auteur']);
          }
      
      // SPIP 1.9 ^^
      	} else {
      // SPIP 2.0 vv
      
        	If ( $auteur_session['cookie_oubli'] != '' ) {
      	  	$C_Id = $auteur_session['cookie_oubli'];
        		echo 'cookie_oubli' . $auteur_session['cookie_oubli'];
        	} else {
      			include_spip('base/abstract_sql');
       			if ( $table_prefix != '' ) $t_prefix = $table_prefix . "_";
       			$C_Id = $auteur_session['alea_futur'];
        		echo 'alea_futur' . $auteur_session['alea_futur'];
      			sql_updateq($t_prefix . 'auteurs', array('cookie_oubli' => $C_Id), 'id_auteur='.$auteur_session['id_auteur']);
       		}
       	}

      A priori il y a quelques problème de détection des versions dans certains cas.
      Avec les versions dont je dispose cela fonctionne, à voir donc avec les versions « plus exotiques ».

      Taryck.

    • Grâce aux tests fait par Marjorie les corrections ont été apporté en version 0.3 pour que cela marche pour SPIP 2.0 et SPIP 1.9

    Répondre à ce message

  • Pour les erreurs 404 qui indiquent que l’url générée n’est pas valide, il faut comparer ses url avec l’url « normale ».

    Pour se faire, utiliser la fonctionalité « oublis de mot de passe » généralement sur la page de login. Une fois le e-mail recu comparer les url (celle dans l’e-mail et celle généré par la balise).


    Pour SPIP 1.9.x l’url devrait etre de type :

    http://www.xxx /spip.php ?p=yyyy.zzz& action=pass


    Pour SPIP 2.0.x l’url devrait etre de type :

    http://www.xxx /spip.php ?p=yyyy.zzz& page=spip_pass


    Donc version 1.9 on utilise action en version 2.0 c’est page

    Si votre url dans l’e-mail est :

    http://www.xxx /spip.php ?p=yyyy.zzz& page=spip_password

    Il vous faudra utiliser la balise : #URL_NOUVMDP{’spip_password’} au lieu de #URL_NOUVMDP

    Répondre à ce message

  • Arf, ça ne marche pas chez moi... (spip 2.0.5). J’ai réussi à installer la page on l’on doit cliquer sur oui ou non, mais si on clique sur oui... on a une erreur 404...

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom