как ограничить вход пользователя в систему всякий раз, когда пользователь приостанавливает действие, редактируя действие wp-login?


Я написал такую функцию, как суперадминистратор, который может ставить учетные записи пользователей на "удержание". Я должен убедиться, что учетная запись пользователя, которая заблокировала его учетную запись, не может войти в систему. Проблема здесь в том, что пользователь может войти в систему, если его учетная запись все еще заблокирована. Я использую поле "пользовательские мета-данные пользователя" под названием "Удерживающий пользователь", в то время как суперадминистратор переводит пользователя в режим ожидания. Во время входа пользователя я использую действие wp-входа wordpress, как отредактировать действие wp-входа, чтобы пользователь не мог войти в систему на основе пользовательское мета-поле пользователя в wordpress. Пока учетная запись пользователя заблокирована, я обновляю "мету пользователя", как показано ниже:

if(isset($_GET['user_id']) && ($_GET['action']=='hold'))
{
  update_user_meta( $_GET['user_id'], 'holdUser',1 );
  wp_mail($email_to, $subject, $content,$headers);
}

Моя форма входа в систему имеет следующий код:

<form method="post" action="'.$this->SiteUrl.'wp-login.php">
  <input type="text" id="user_login" name="log">
  <input type="password" name="pwd">
  <button target="" class="submit">Login</button>
</form>

Мой вопрос здесь заключается в том, как редактировать'wp-login.php "зацепить на основе поля user_meta "Holduser", если его значение равно 1, то не входить в систему этого пользователя.?

Обновление: Я написал отдельный хук, если не удается войти в систему пользователя, как показано ниже:

add_action( 'wp_login_failed', 'my_front_end_login_fail' );
function my_front_end_login_fail( $username ) {
  $referrer = $_SERVER['HTTP_REFERER'];
  if( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') )
  {
    if ( !strstr($referrer,'/?actiont=failed') )
    {
      wp_redirect( $referrer . '/?actiont=failed&message=authentication-failed' );
    }
    else 
    {
      wp_redirect( $referrer );
    }
    exit;
  }
}

Как я могу получить это сообщение на удержании с крючка "on_hold_error"?

Author: Prasad Patel, 2016-11-29

2 answers

function myplugin_authenticate_on_hold($user)
{
    // username and password are correct
    if ($user instanceof WP_User) {
        $on_hold = get_user_meta($user->ID, 'is_on_hold', true);
        if ($on_hold) {
            return new WP_Error('on_hold_error', 'You are on hold');
        }
    }

    return $user;
}

add_filter('authenticate', 'myplugin_authenticate_on_hold', 21);

Приоритет должен быть 21, так как wp_authenticate_username_password и wp_authenticate_email_password имеют приоритет 20. Они возвращают объект типа WP_User, если они могут аутентифицировать пользователя. Поэтому, если пользователь аутентифицирован, проверьте, находится ли он в режиме ожидания. Если это так, покажите пользователю ошибку.

Изменить: почему вы не используете форму входа по умолчанию?

 0
Author: P1nGu1n, 2016-11-29 10:08:48

Используйте фильтр wp_authenticate_user и верните WP_Error, чтобы остановить вход в систему.

add_filter( 'wp_authenticate_user', 'my_theme_authenticate_user', 1 );

function my_theme_authenticate_user( $user ) {

    if ( is_wp_error( $user ) ) {
        return $user;
    }


    $on_hold = get_user_meta($user->ID, 'holdUser', true );
    if ( (int)$on_hold == 1) {
        return new WP_Error( 'get lost' );
    }

    return $user;
}

(поместите вышесказанное в свою тему functions.php)

Кроме того, я думаю, что вам, возможно, потребуется указать свой элемент формы name="loginform", чтобы WordPress мог использовать его и относиться к нему так же, как к родной форме входа в WP, и запускать все те же крючки, но не уверен в этом.

PS: Рекомендуется использовать wp_login_form() для создания пользовательской формы входа, так как вы получите другие функции, такие как простой способ указания перенаправления URL-адрес. https://codex.wordpress.org/Function_Reference/wp_login_form

 0
Author: Dan., 2016-11-29 09:17:13