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 :
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
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>
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.
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; } }
Merci d'avance à qui pourra me donner un petit coup de pouce.
Partager