IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WordPress PHP Discussion :

Forcer le changement de mot de passe à la première connexion


Sujet :

WordPress PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 65
    Points : 35
    Points
    35
    Par défaut Forcer le changement de mot de passe à la première connexion
    Bonjour,
    Il s'agit d'un site interne à une entreprise, les salariés recevront par mail un identifiant et un mdp temporaire pour s'y connecter. Lors de leur première connexion, ils doivent être redirigés vers une page leur demandant juste d'entrer un mot de passe puis de le confirmer.
    A aucun moment leur adresse mail réelle ne doit servir, les comptes sont créés avec des adresses mails fictives.
    A aucun moment ils ne doivent se trouver sur la page profil de WP, tout doit se passer en front.
    J'ai trouvé un code (faut que je retrouve l'url) qui permette de détecter si c'est la première visite, si oui, redirection vers une page dont le modèle est une page php créée juste pour afficher le petit formulaire.
    Mais une fois le nouveau mot de passe entré, rien ne se passe après avoir cliqué sur le bouton.
    Voici le code du modèle php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <?php  /* Template Name: Password Reset Form */  
    global $wpdb, $current_user; get_currentuserinfo(); $user_ID  = $current_user->ID;
    $redirect_url = $_GET['redirect_to'];
    $check_val   = 'wp-admin';
    $pos = strpos($redirect_url, $check_val);
    if ($pos === false) {
     $redirect_url = $_GET['redirect_to'];
    } else {
    $site_url = get_site_url();
     $redirect_url = $site_url;
    } 
    ?>
     
    <h1 style="display:none;"><?php the_title(); ?></h1>
     
     
     
     
    <form class="form-horizontal user_form" id="wp_reset_password" action="" method="post">
    <input type="hidden" value="<?php echo $user_ID; ?>" name="userid">
     <input type="hidden" value="<?php echo $redirect_url; ?>" name="redirect_to" id="redirect_to">
     
    <div class="resetpassword-error"></div>
     
     
    <div class="form-group">
    <label class="control-label col-sm-3 col-xs-12" >Nouveau mot de passe :</label>
     
    <div class="col-sm-9 col-xs-12">
      <input class="form-control" value="" name="resetnewpass" id="resetnewpass" type="password">
    </div>
     
     </div>
     
     
    <div class="form-group">
    <label class="control-label col-sm-3 col-xs-12" >Confirmer le nouveau mot de passe :</label>
     
    <div class="col-sm-9 col-xs-12">
      <input class="form-control" value="" name="restnewcpass" id="restnewcpass" type="password">
    </div>
     
     </div>
     
     
    <div class="form-group">
     
    <div class="col-sm-offset-3 col-sm-9 col-xs-12">
     
    <div class="formbtn">
      <input type="hidden" value="resetpwd" name="action">
     <?php wp_nonce_field( 'resetpwd', 'resetpassword' ); ?>
      <input type="submit" id="resetsubmitbtn" class="newreset_password" name="submit" value="Mise à jour du mot de passe" />
      </div>
     
     
    <div class="regwaiting" style="display:none;"></div>
     
     </div>
    </div>
    </div>
    </form>
    Et le code ajouté à functions.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    /*Forcer modif mdp a la première connexion*/
    /* on ajoute un champ force_login_meta  quand l'utilisateur se connecte au site*/
    add_action( 'user_register', 'force_login_meta_update', 10, 1 );
    function force_login_meta_update( $user_id ) {
    update_user_meta($user_id, 'force_login', 1);
    }
    /*l'user est redirigé vers la page de modification de mot de passe */
    function redirect_passwort_login_redirect($redirect_to, $url_redirect_to = '', $user = null) {
     
     if(isset($user->ID) ) {
    $changed_password = get_metadata("user", $user->ID, "force_login",true);
    if( $changed_password == 1 ) {
      return get_bloginfo('url') . "/nouveau-mot-de-passe/?redirect_to=".$redirect_to;
    } else {
      return get_bloginfo('url');
    }
     }
     return $redirect_to;
    }
    add_filter('login_redirect', 'redirect_passwort_login_redirect',10,3);
     
    /*le mot de passe est réinitialisé*/
    // reset password update
    add_action('wp_ajax_nopriv_resetpwd', 'resetpwd');
    // add action for logged in user
    add_action('wp_ajax_resetpwd','resetpwd');
    add_action('admin_post_nopriv_resetpwd', 'resetpwd');
     
    function resetpwd(){
     global $wpdb, $user_ID;
     $error  = array();
     $id = $_POST['userid'];
     $new_password = $_POST['restnewcpass'];
     if (!isset( $_POST['resetpassword'] )  || ! wp_verify_nonce( $_POST['resetpassword'], $_POST['action'] ) ) {
      $error[] = 'Please refresh your page and then update';
     } else {
    $userdata['ID'] = $id; //admin user ID
      $userdata['user_pass'] = $new_password;
      wp_update_user( $userdata );
     
    update_metadata("user",$id,"force_login",0);
    echo json_encode(array('type' => 'success', 'message' => "
     
    Votre mot de passe est modifié
     
    "));
    die;
     }
     
     if(sizeof($error)>0){
    echo json_encode(array('type' => 'error', 'message' => implode("
    ", $error)));
    die;
     }
    }
    J'utilise le plugin Peter's Login Redirect parce qu'en fonction de l'user, la page d'accueil est différente. Il y a bien une fonction au sujet du redirect_to mais je ne comprends pas très bien ce qu'il faut en faire.

    Merci d'avance à qui pourra me donner un petit coup de pouce.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    Hello, petit up, je m'arrache les cheveux
    J'ai trouvé un plugin permettant de forcer le changement de mot de passe lors de la première connexion (Force password change).
    Il ajoute une une meta_key dans la table usermeta force-password-change, avec une valeur à 1.
    Mais ensuite il redirige vers la page profile.php, ce que je ne veux pas.
    J'ai donc ajouté dans functions.php le code de pippinplugins qui permet de créer un petit form juste pour changer le mot de passe, et un shortcode pour afficher le form où on veut.

    Mais ...
    1. La redirection vers la page créée contenant le shortcode ne se fait pas. Après avoir entré son identifiant et son mdp, on reste sur la même page (mais on est bien identifié)

    2. J'ai repris la ligne du plugin Force password qui supprime la meta_key quand le changement est fait et l'ai ajoutée dans functions.php, dans le code de pippin, juste après la ligne qui met à jour les données utilisateur après le changement de mdp. Mais vérification faite dans la bdd, rien ne change, la meta_key est toujours là avec valeur 1.

    J'ai vraiment besoin d'un coup de pouce !

    Merci d'avance

Discussions similaires

  1. [eZ Publish] changement de mot de passe à la première connexion
    Par ADE_ACG dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 05/12/2012, 09h31
  2. [Interbase] Changement de mot de Passe
    Par touhami dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/12/2005, 16h37
  3. MySQL encrypt et changement de mot de passe
    Par Michaël dans le forum Requêtes
    Réponses: 6
    Dernier message: 27/11/2005, 17h37
  4. Probleme avec changement du mot de passe utilisateur
    Par Davenico dans le forum Outils
    Réponses: 2
    Dernier message: 19/12/2003, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo