对于开放会员注册的网站,增加网站会员的前端操作功能是非常有必要的。之前博客分享了会员前端注册教程《前端会员注册功能表单调用》和会员前端登录教程《实现前端输入用户》。姓名和密码登录表》,下面我将在会员前台分享找回密码教程。
密码重置过程:(直接跳过代码)首先访问此页面wordpress 找回密码 邮件,输入需要重置密码的帐户的电子邮件或用户名。系统通过用户输入的用户名\email给用户发送邮件wordpress建站,邮件中包含一个链接地址(还是这个页面),但是链接地址包含一个key,所以如果没有密码在访问此页面的地址中。如果有密钥,用户需要输入用户名或密码。如果有密钥,则用户在这里重置密码,而不是提交重置密码的请求。用户通过邮件中的地址(地址中包含密钥)访问该页面,如果地址中包含密钥,则用户是来重设密码的wordpress 找回密码 邮件,所以判断密钥的正确性。如果正确wordpress网站建设,邮件会生成新密码发送给用户,如果不正确,会显示错误信息。
注意:请记住上面提到的两个“动作”,重置密码并提交重置密码的请求。上面提到了一把钥匙。密钥存储在数据库中,而在用户表中,一般是随机生成的。
操作步骤:
1、创建一个php文件,命名为page-.php,添加如下代码:
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
Template Name:找回密码
*/
global $wpdb, $user_ID;
function tg_validate_url() {
global $post;
$page_url = esc_url(get_permalink( $post->ID ));
$urlget = strpos($page_url, "?");
if ($urlget === false) {
$concate = "?";
}else{
$concate = "&";
}
return $page_url.$concate;
}
if(!$user_ID){
if($_POST['action'] == "tg_pwd_reset"){ //判断是否为请求重置密码
if ( !wp_verify_nonce( $_POST['tg_pwd_nonce'], "tg_pwd_nonce")) { //检查随机数
exit("不要开玩笑");
}
if(empty($_POST['user_input'])) {
echo "请输入用户名或E-mail地址
";
exit();
}
//过滤提交的数据
$user_input = $wpdb->escape(trim($_POST['user_input']));
if ( strpos($user_input, '@') ) { //判断用户提交的是邮件还是用户名
$user_data = get_user_by_email($user_input); //通过Email获取用户数据
if(empty($user_data) || $user_data->caps[administrator] == 1) { //排除管理员
echo "无效的E-mail地址!
";
exit();
}
} else {
$user_data = get_userdatabylogin($user_input); //通过用户名获取用户数据
if(empty($user_data) || $user_data->caps[administrator] == 1) { //排除管理员
echo "无效的用户名!
";
exit();
}
}
$user_login = $user_data->user_login;
$user_email = $user_data->user_email;
$key = $wpdb->get_var($wpdb->prepare("SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s", $user_login)); //从数据库中获取密匙
if(empty($key)) { //如果为空
//generate reset keys生成 keys
$key = wp_generate_password(20, false); //生成一个20位随机密码用做密匙
$wpdb->update($wpdb->users, array('user_activation_key' => $key), array('user_login' => $user_login)); //更新到数据库
}
//邮件内容
$message = __('有人提交了重置下面账户密码的请求:') . "\r\n\r\n";
$message .= get_option('siteurl') . "\r\n\r\n";
$message .= sprintf(__('用户名: %s'), $user_login) . "\r\n\r\n";
$message .= __('如果不是您本人操作,请忽略这个邮件即可.') . "\r\n\r\n";
$message .= __('如果需要重置密码,请访问下面的链接:') . "\r\n\r\n";
$message .= tg_validate_url() . "action=reset_pwd&key=$key&login=" . rawurlencode($user_login) . "\r\n"; //注意tg_validate_url(),注意密码重置的链接地址,需要action\key\login三个参数
if ( $message && !wp_mail($user_email, '密码重置请求', $message) ) {
echo "邮件发送失败-原因未知。
";
exit();
} else {
echo "我们已经在给你发送的邮件中说明了重置密码的各项事宜,请注意查收。
";
exit();
}
} else {
get_header();
?>
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
endwhile; else : ?>
_e('没有找到'); ?>
endif; ?>
if(isset($_GET['key']) && $_GET['action'] == "reset_pwd") { //如果存在key且action参数似乎reset_pwd
$reset_key = $_GET['key']; //获取密匙
$user_login = $_GET['login']; //获取用户名
$user_data = $wpdb->get_row($wpdb->prepare("SELECT ID, user_login, user_email FROM $wpdb->users WHERE user_activation_key = %s AND user_login = %s", $reset_key, $user_login));
//通过key和用户名验证数据
$user_login = $user_data->user_login;
$user_email = $user_data->user_email;
if(!empty($reset_key) && !empty($user_data)) {
$new_password = wp_generate_password(7, false); //生成7位随机密码
//echo $new_password; exit();
wp_set_password( $new_password, $user_data->ID ); //重置密码
//通过邮件将密码发送给用户
$message = __('账户的新密码为:') . "\r\n\r\n";
$message .= get_option('siteurl') . "\r\n\r\n";
$message .= sprintf(__('用户名: %s'), $user_login) . "\r\n\r\n";
$message .= sprintf(__('密码: %s'), $new_password) . "\r\n\r\n";
$message .= __('你可以使用你的新密码通过下面的链接登录: ') . get_option('siteurl')."/login" . "\r\n\r\n";
if ( $message && !wp_mail($user_email, '密码重置请求', $message) ) {
echo "邮件发送失败-原因未知
";
exit();
} else {
$redirect_to = tg_validate_url()."action=reset_success";//跳转到登陆成功页面(还是本页面地址)
wp_safe_redirect($redirect_to);
exit();
}
} else{
exit('无效的key.');
}
}
if(isset($_GET['action']) && $_GET['action'] == "reset_success") { //如果动作为reset_success就是成功了哇
echo '密码重置成功,已经通过邮件发送给您,请查收。
';
}
?>
}
}else{
wp_redirect(home_url());
exit;
}
get_footer();
?>
2、后台新建页面-页面,在页面属性的“模板”中选择“找回密码”:
p>
然后发布页面。
注意:发送密码重置邮件需要网站服务器开启邮件功能!
文章来自互联网,侵权请联系删除,文章阐述观点来自文章出处,并不代表本站观点。
www.8001717.cn