WordPress新用戶注冊時提示“您的密碼重設鏈接無效”或找回密碼時提示連接無效
在使用Wordpress密碼找回功能及新用戶注冊郵件中的重置密碼鏈接時,Wordpress提示“您的密碼重設鏈接無效,請在下方請求新鏈接。”、“該key似乎無效”、“invalid key”。
這個其實不是wordpress的問題,郵箱收到郵件后,會將密碼重置鏈接地址及其前后的“<>”一起當成鏈接地址生成超鏈接,點擊此超鏈接后,由于傳給wordpress的參數不對(多了個>),例如把鼠標移到下圖的紅色框的連接上,并看到瀏覽器左下角的URL提示連接,會發現多了一個“>”,所以wordpress提示密碼重設鏈接無效。
此問題主要影響忘記密碼時的找回密碼功能及新用戶注冊時,系統給新用戶發送的密碼設置功能。可通過以下兩個步驟解決此問題:
解決找回密碼時提示“您的密碼重設鏈接無效”:
打開WP根目錄下的 wp-login.php,找到如下代碼(374行左右):
- $message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">/r/n";
- //修改為:
- $message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "/r/n";
即去掉兩個尖括號即可。
解決新用戶注冊時,點擊郵件中的重置密碼鏈接提示“您的密碼重設鏈接無效”:
打開WP安裝目錄下的/wp-includes/pluggable.php,找到如下代碼(1741行左右):
- $message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . ">/r/n/r/n";
- //修改為:
- $message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . "/r/n/r/n";
以上修改后,用戶收到的密碼重置及新用戶收到的密碼設置郵件將不會再包含“<>”,用戶再郵箱中點擊鏈接后即可正常重置或者設置密碼。以上修改涉及到Wordpress源代碼的修改,每次升級Wordpress后修改會被覆蓋,必須重新進行以上修改。
另一種解決方式:把下面的代碼加入當前主題的functions.php里面就可以了。
- function reset_password_message( $message, $key ) {
- if ( strpos($_POST['user_login'], '@') ) {
- $user_data = get_user_by('email', trim($_POST['user_login']));
- } else {
- $login = trim($_POST['user_login']);
- $user_data = get_user_by('login', $login);
- }
- $user_login = $user_data->user_login;
- $msg = __('有人要求重設如下帳號的密碼:'). "/r/n/r/n";
- $msg .= network_site_url() . "/r/n/r/n";
- $msg .= sprintf(__('用戶名:%s'), $user_login) . "/r/n/r/n";
- $msg .= __('若這不是您本人要求的,請忽略本郵件,一切如常。') . "/r/n/r/n";
- $msg .= __('要重置您的密碼,請打開下面的鏈接:'). "/r/n/r/n";
- $msg .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') ;
- return $msg;
- }
- add_filter('retrieve_password_message', reset_password_message, null, 2);
這種辦法的缺點是,每次換主題都要重新把代碼添加到主題的function.php文件中。
新聞熱點
疑難解答
圖片精選