В настоящее время я пытаюсь создать настраиваемую форму пароля для сброса, которая, кажется, работает нормально, пока не потребуется проверить ключ для пользователя:
//Redirect away from default wordpress to reset password
function redirect_to_reset_password() {
if ( 'GET' == $_SERVER['REQUEST_METHOD'] ) {
// Verify key / login combo
$user = check_password_reset_key( $_REQUEST['key'], $_REQUEST['login'] );
if ( ! $user || is_wp_error( $user ) ) {
if ( $user && $user->get_error_code() === 'expired_key' ) {
wp_redirect( home_url( '/login?login=expiredkey/' ) );
} else {
wp_redirect( home_url( '/login?login=invalidkey/' ) );
}
exit;
}
$redirect_url = home_url( '/reset-password/' );
$redirect_url = add_query_arg( 'login', esc_attr( $_REQUEST['login'] ), $redirect_url );
$redirect_url = add_query_arg( 'key', esc_attr( $_REQUEST['key'] ), $redirect_url );
wp_redirect( $redirect_url );
exit;
}
}
add_action('login_form_rp', 'redirect_to_reset_password');
add_action('login_form_resetpass', 'redirect_to_reset_password');
//Make new password
function do_password_reset() {
if ( 'POST' == $_SERVER['REQUEST_METHOD'] ) {
$rp_key = $_REQUEST['rp_key'];
$rp_login = $_REQUEST['rp_login'];
$user = check_password_reset_key( $rp_key, $rp_login );
if ( ! $user || is_wp_error( $user ) ) {
if ( $user && $user->get_error_code() === 'expired_key' ) {
wp_redirect( home_url( '/login?login=expiredkey/' ) );
} else {
wp_redirect( home_url( '/login?login=invalidkey/' ) );
}
exit;
}
if ( isset( $_POST['pass1'] ) ) {
if ( $_POST['pass1'] != $_POST['pass2'] ) {
// Passwords don't match
$redirect_url = home_url( '/reset-password/' );
$redirect_url = add_query_arg( 'key', $rp_key, $redirect_url );
$redirect_url = add_query_arg( 'login', $rp_login, $redirect_url );
$redirect_url = add_query_arg( 'error', 'password_reset_mismatch', $redirect_url );
wp_redirect( $redirect_url );
exit;
}
if ( empty( $_POST['pass1'] ) ) {
// Password is empty
$redirect_url = home_url( '/reset-password/' );
$redirect_url = add_query_arg( 'key', $rp_key, $redirect_url );
$redirect_url = add_query_arg( 'login', $rp_login, $redirect_url );
$redirect_url = add_query_arg( 'error', 'password_reset_empty', $redirect_url );
wp_redirect( $redirect_url );
exit;
}
// Parameter checks OK, reset password
reset_password( $user, $_POST['pass1'] );
wp_redirect( home_url( '/login?password=changed/' ) );
} else {
echo "Invalid request.";
}
exit;
}
}
add_action( 'login_form_rp', 'do_password_reset' );
add_action( 'login_form_resetpass', 'do_password_reset' );
Я слоняюсь, пытаясь выяснить, в чем может быть причина проблемы, и обнаружил, что ключ в user_activation_key не совпадает с ключом, который я получаю в своем URL при попытке сбросить пароль , Например:
DB: 1553346836:$P$BYEbftAGRfnhlBTeuNL4ylhsxRyhS3/
URL: key=dx1GjoJnaD6Dytc5zpNq
Но мне не удалось найти решение или причину.