web-dev-qa-db-fra.com

Réinitialisation du mot de passe - Désactivé pour les comptes LDAP

J'utilise le plug-in wpDirAuth pour autoriser les connexions LDAP et la création automatique de compte. Un problème que j'ai rencontré est que les utilisateurs LDAP peuvent toujours demander une réinitialisation du mot de passe. Ils reçoivent l'e-mail avec le lien, mais le lien indique que la clé est invalide. C'est bien qu'il ne tente pas de changer leur mot de passe.

Toutefois, je souhaite éviter leur envoi d'e-mails. Un message indiquant "Désolé, le mot de passe de votre compte ne peut pas être modifié sur ce site. Veuillez faire appel à IT Service Desk" lors de la soumission du formulaire.

Existe-t-il un crochet que je peux utiliser une fois le formulaire soumis pour vérifier si le compte est un compte LDAP (je pourrais vérifier l'adresse de messagerie de l'entreprise pour identifier les comptes LDAP) et renvoyer le message d'erreur?

1
Chris

Code permettant de vérifier et de bloquer les utilisateurs LDAP pour réinitialiser le mot de passe.

/**
 * Checks whether a user is LDAP user and restricts to reset password.
 *
 * @param  bool   $allow    Whether the password can be reset.
 * @param  int    $user_id  The ID of the user.
 * @return bool|WP_Error
 */
function ldap_restrict_password_reset( $allow, $user_id ) {

    $user = get_user_by( 'id', $user_id );
    if ( ! empty( $user ) ) {
        $user_login   = stripslashes( $user->data->user_login );
        $user_email   = stripslashes( $user->data->user_email );

        // check if the user a LDAP user
        if( $user_email === '[email protected]' ) {
            return new WP_Error('no_password_reset', __('Password reset is not allowed for this LDAP user on this site.'));
        }
    }

    return $allow;
}
/* Filters whether the user's password can be reset. */
add_filter( 'allow_password_reset', 'ldap_restrict_password_reset', 10, 2 );

Remarque: Veuillez ajouter du code pour obtenir et vérifier si l'utilisateur est un utilisateur LDAP ou non.

=============================================== =======

Voici quelques-uns des points d'ancrage que vous pouvez utiliser pour arrêter d'envoyer un courrier électronique et afficher un message d'erreur.

/**
 * Fires before a new password is retrieved.
 *
 * @since 1.5.1
 *
 * @param string $user_login The user login name.
 */
do_action( 'retrieve_password', $user_login );

/**
 * Filter whether to allow a password to be reset.
 *
 * @since 2.7.0
 *
 * @param bool true           Whether to allow the password to be reset. Default true.
 * @param int  $user_data->ID The ID of the user attempting to reset a password.
 */
$allow = apply_filters( 'allow_password_reset', true, $user_data->ID );

if ( ! $allow )
    return new WP_Error('no_password_reset', __('Password reset is not allowed for this user'));
else if ( is_wp_error($allow) )
    return $allow;

Ci-dessus, une partie du code provient du fichier wp-login.php. http://wpseek.com/retrieve_password/

1
Subharanjan