如何要求用户第一次登录必须修改密码
最后更新于:四月 9, 2017

如何要求用户第一次登录必须修改密码

目前很多的站点都添加了注册登录功能,然而在面向不同的客户群体时,我们的需求也不一样。今天给大家分享一下我给客户做功能时遇到的问题:如何要求用户在第一次登录时必须修改登录密码?

步骤简要:

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>&nbsp; 密码不匹配</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>&nbsp; 密码修改失败</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"]

登陆账户 创建新账户


忘记密码?×

已经有账户? 登陆


获取验证码
×

重置密码

×