如何要求用户第一次登录必须修改密码
目前很多的站点都添加了注册登录功能,然而在面向不同的客户群体时,我们的需求也不一样。今天给大家分享一下我给客户做功能时遇到的问题:如何要求用户在第一次登录时必须修改登录密码?
步骤简要:
1.更改密码表单
2.ajax处理
3.js传参
4.用户页面处理
首先我们要创建html更改密码表单Form
<!-- 更改密码 --> <article class="change-password-content"> <div class = "change-password-messages"> <p>您必须更改密码,才能继续访问网站内容</p> </div> <div class = "change-password-form"> <label for="password">新密码></label><br /> <input type="password" class="form-control password1" /> <label for="password2">重复密码</label><br /> <input type="password" class="form-control password2" /> <input type="submit" name="change-password" value="提交修改" class="btn-change-pass" /> </div> </article>
php ajax处理,在functions.php中进行
<?php add_action('wp_ajax_lb_change_password', array('NGP_Users', 'lb_change_password') ); add_action('wp_ajax_nopriv_lb_change_password', array('NGP_Users', 'lb_change_password') ); function lb_change_password() { global $current_user; if(isset($_POST['lb_action']) && $_POST['lb_action'] == 'change_password') { $password = sanitize_text_field($_POST['new_password']); // 定义将传递给 wp_update_user() $userdata = array( 'ID' => $current_user->ID, 'user_pass' => $password ); $user_id = wp_update_user($userdata); // 检查返回的字符串是否等于当前的用户ID if($user_id == $current_user->ID){ update_user_meta($current_user->ID, 'ngp_changepass_status', 1); echo 'success'; } else { echo 'error'; } } // 始终退出,以避免进重复操作 exit(); } ?>
js处理
<script> $(document).ready(function() { // admin-ajax var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; function cvf_form_validate(element) { element.effect("highlight", { color: "#F2DEDE" }, 1500); element.parent().effect('shake'); } // 表单按钮 $('body').on('click', '.btn-change-pass', function(e) { // 验证空字段或不匹配的密码 if ($('.change-password-form .password1').val() === '') { cvf_form_validate($('.password1')); } else if ($('.change-password-form .password2').val() === '') { cvf_form_validate($('.password2')); } else if ($('.change-password-form .password2').val() !== $('.change-password-form .password1').val()) { $(".change-password-messages").html('<p class = "bg-danger"><span class = "glyphicon glyphicon-remove-circle"></span> 密码不匹配</p>'); } else { // 自定义加载GIF图像 $(".change-password-messages").html('<p><img src = "<?php bloginfo('template_url'); ?>/images/loading.gif" class = "loader" /></p>'); // 定义Ajax参数 var data = { 'action': 'lb_change_password', 'lb_action': 'change_password', 'new_password': $('.change-password-form .password2').val() }; $.post(ajaxurl, data, function(response) { //检测收到的Ajax响应,然后为每个特定的响应做必要的逻辑 if(response === 'success') { $(".change-password-messages").html('<p class = "bg-success">密码修改成功 <br /><a href = "<?php echo home_url(); ?>">点击这里继续</a></p>'); $('.change-password-form').hide(); } else if (response === 'error') { $(".change-password-messages").html('<p class = "bg-danger"><span class = "glyphicon glyphicon-remove-circle"></span> 密码修改失败</p>'); $('.change-password-form').show(); } }); } }); }); </script>
继续更新密码使用函数wp_update_user(),返回用户的ID成功和错误失败的一个数组。 然后检查如果返回ID和当前用户ID是相同的(或更新成功),如果是的,我们更新用户状态为1,我们以后可以使用来验证是否用户已经改变了他们的密码。
用户页面
<?php global $current_user; $changepass_status = get_user_meta($current_user->ID, 'lb_changepass_status', true); if (!is_super_admin() && $changepass_status != 1) { wp_redirect(home_url('/change-password/')); }
检查是否存在“lb_changepass_status”或不等于1(0或空意味着密码尚未改变)。 如果不存在或不等于1,我们将他们重定向页面更改密码。
[sdfile url=”https://drive.google.com/open?id=0B4ytzsRNIg7gS0dnajVyMURJRWM”]