web-dev-qa-db-fra.com

Connexion autorisée si la ligne du tableau existe

J'utilise le crochet de filtre "authentifier" dans le codex WordPress pour ajuster le script de validation de la page de connexion WordPress.

Ce que je dois faire, c'est créer une requête sur une table séparée pour voir s'il y a une ligne dans la base de données ou non pour la connexion individuelle.

Voici ce que j'ai jusqu'à présent.

 add_filter( 'authenticate', 'check_user_is_in_ibew_members', 40, 3 );
 function check_user_is_in_ibew_members( $user, $username, $password ) {
    global $wpdb;
    $Card = $username
    $result = $wpdb->get_results( "SELECT 1 FROM members WHERE Card = $Card LIMIT 1");
   // $query = "SELECT 1 FROM members WHERE Card = $Card LIMIT 1";
   // $result = $wpdb->get_results($query);
   foreach ($result as $query) {
        // Evaluates to true because $query is empty
        if (empty($query)) {
            echo 'Card Number is currently inactive';
        }

    }
    return $user;
 }

Lorsque l'utilisateur tente de se connecter, nous sélectionnons 1 ligne dans la table où Card est égal au nom d'utilisateur WP. Si le membre se trouve dans la base de données, le formulaire doit renvoyer la valeur true et connecter le visiteur. Si le visiteur ne se trouve pas dans la table, le formulaire doit renvoyer false et fournir un message d'erreur.

Cela ne semble pas fonctionner. J'ai vérifié et il n'y a pas d'erreur dans le code lui-même, ce qui me fait penser que je ne l'applique pas correctement.

Puis-je obtenir un peu d’aide quant à ce que j’ai fait de mal pour tirer les leçons de mes erreurs? Je remercie tous ceux qui aident.

1
DigitalDesigner

J'ai donc pu trouver une solution qui fonctionne.

Voici ce que j'ai fait.

D'abord je me suis accroché au filtre d'authentification

 add_filter( 'authenticate', 'check_user_is_in_custom_table', 30, 2 );

A partir de là j'ai créé ma fonction

 function check_user_is_in_custom_table( $user, $username, $password ) {

Chargé la base de données WordPress

 global $wpdb;

Créé ma variable de résultat

 $result = $wpdb->get_row( $wpdb->prepare( "SELECT User FROM custom_table WHERE User = %s", $username ) );

Je devais modifier un peu ma déclaration si

 if ( is_null ( $result ) ) { //This is the edited line
   return new WP_Error( 'deactivated_in_custom_table', 'This account has been deactivated.' );
 }
 return $user;

Et enfin fermé la fonction

 }

Voici le code complet pour quiconque veut l'utiliser pour sa propre référence.

 add_filter( 'authenticate', 'check_user_is_in_custom_table', 30, 2 );
 function check_user_is_in_custom_table( $user, $username, $password ) {
    global $wpdb;
    $result = $wpdb->get_row( $wpdb->prepare( "SELECT User FROM custom_table WHERE User = %s", $username ) );
      if ( is_null ( $result ) ) {
        return new WP_Error( 'deactivated_in_custom_table', 'This account has been deactivated.' );
      }
      return $user;
 }

Voici ce qui se passe, le formulaire de connexion est exécuté à travers la validation que nous avons créée en utilisant la table personnalisée de la base de données WordPress. S'il y a une ligne dans la table où l'utilisateur est le nom d'utilisateur fourni lors de l'ouverture de session, il peut continuer. S'il n'y a pas d'utilisateur portant ce nom dans la table personnalisée, un message d'erreur s'affiche.

En fin de compte, il s’agissait d’une seule ligne qui était à l’origine de mes problèmes, mais cela peut se produire souvent lors de l’écriture d’éléments personnalisés de toutes sortes :) Bonne codage pour tous.

0
DigitalDesigner