如果表行存在,则允许登录

时间:2017-06-12 作者:DigitalDesigner

我正在使用WordPress codex中的“authenticate”过滤器挂钩来调整WordPress登录页面的验证脚本。

我需要做的是创建一个对单独表的查询,以查看数据库中是否有一行用于个人登录。

这是我到目前为止的情况。

 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;
 }
基本上,当用户尝试登录时,我们从表中选择一行,其中Card等于WP用户名。如果成员在数据库中,则表单应返回true并让访问者登录。如果访问者不在表中,则表单应返回false并提供错误消息。

这似乎不起作用。我已经检查过了,代码本身没有错误,这让我相信我没有正确地实现它。

我是否可以得到一些帮助,了解我做错了什么,以便从错误中吸取教训。我感谢所有提供帮助的人。

1 个回复
最合适的回答,由SO网友:DigitalDesigner 整理而成

所以我找到了一个可行的解决方案。

这就是我所做的。

首先,我连接到authenticate过滤器

 add_filter( \'authenticate\', \'check_user_is_in_custom_table\', 30, 2 );
从那里我创建了我的函数

 function check_user_is_in_custom_table( $user, $username, $password ) {
已加载WordPress数据库

 global $wpdb;
创建了我的结果变量

 $result = $wpdb->get_row( $wpdb->prepare( "SELECT User FROM custom_table WHERE User = %s", $username ) );
我不得不稍微修改一下if语句

 if ( is_null ( $result ) ) { //This is the edited line
   return new WP_Error( \'deactivated_in_custom_table\', \'This account has been deactivated.\' );
 }
 return $user;
最后关闭了函数

 }
以下是所有想将其用于自己参考的人的完整代码。

 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;
 }
下面是发生的情况,登录表单通过我们使用WordPress数据库中的自定义表创建的验证运行。如果表中有一行用户是登录时提供的用户名,则可以继续。如果自定义表中没有该名称的用户,则会向该用户发出错误消息。

结果是一行代码导致了我的问题,但这在编写任何类型的自定义元素时都会经常发生:)快乐地编写所有代码。

结束