WordPress user Authentication

时间:2018-08-22 作者:Metal Zer0

我目前正在使用WordPress开发一个插件。我创建了一个允许用户注册的注册页面,然后这些信息存储在名为finusers的自定义数据库表中。

这就是我目前所做的:

下面的代码用于将用户注册到名为finusers的自定义表中。

  function db_insert($emailAdd, $password){
        global $wpdb, $formErr;

        if(1 > count($formErr->get_error_messages())){
            $table = $wpdb->prefix."finusers";
            $checksql = "SELECT * FROM $table WHERE email_address=\'$emailAdd\'";
            $checkdb = $wpdb->query($checksql);

            if($checkdb !=0){
                echo "Email address is registered to a user";
            }else {
                $data = array("email_address"=>$emailAdd, "password"=>$password); 
                $format = array(\'%s\'); 
                $wpdb->insert($table,$data,$format);

                echo "You have successfully registered";
            }
        }
    }
在用户注册之后,我使用以下函数对用户进行身份验证

 function authenticate($emailAdd, $password){
        global $formErr;

        $username = $emailAdd;
        $password = $password;

        $check = wp_authenticate_username_password(NULL, $username, $password);

        if(1 > count($formErr->get_error_messages())){
            if(is_wp_error($check)){
                echo "Falied";
            }else{
                echo "Success";
            }
        }
    }
我在这里遇到的问题是,wp\\u authenticate\\u username\\u password函数正在检查默认用户表以执行用户身份验证。如何使用名为finusers的自定义表而不是默认表users来进行用户身份验证。

注意:我确实意识到代码很容易被sql注入。此外,关于如何改进代码的任何建议都将非常有用

2 个回复
SO网友:Aslam Khan

在研究和查找WordPress Codex之后,这是我用来验证的代码。。

我希望这对所有的朋友都有帮助。这对我来说很好:)

 $creds = array(
    \'user_login\'    => $username,
    \'user_password\' => $userpassword,
    \'remember\'      => true
 );
 
 if(!empty($username) && !empty($userpassword)) {
    
    if(!username_exists($username)) {

        $userdata = array(
            \'user_login\'  =>  $username,
            \'user_email\'  =>  $useremail, 
            \'user_pass\'   =>  $userpassword, 
            \'role\'        =>  \'customer\' 
        );

        $user_id = wp_insert_user( $userdata ) ; 
        
        $user = wp_signon( $creds, false );
        wp_set_current_user($user->ID,$username); 
        wp_set_auth_cookie($user->ID, true, false );  

        wp_redirect(site_url()); 
        
 
    }

SO网友:Metal Zer0

在研究和查找WordPress Codex和支持论坛后,这是我用来验证存储在自定义表中的用户的代码

add_filter(\'wp_authenticate_user\', \'custom_authentication\',10 ,2);
function custom_authentication($emailAdd, $password) {
    global $wpdb, $formErr;

    if(1 > count($formErr->get_error_messages())){
        $table = $wpdb->prefix.\'finusers\';
        $sql = "SELECT * FROM $table WHERE email_address=\'$emailAdd\' AND password=\'$password\'";
        $authenticate_user = $wpdb->query($sql);

        if($authenticate_user!=0){
            echo "Successful authenticate user";
        }else{
            echo "Failed to authenticate user";
        }
    }
}
我将把这个作为我的答案发布,这可能对其他人有所帮助。

我在这里发布了一个更新的答案。我花了一些时间,但在阅读和研究了StackExchange论坛、WordPress codex等之后,这是我的更新代码

add_filter(\'wp_authenticate_user\', \'custom_authentication\', 10 , 2);

function custom_authentication($emailAdd, $password) {
    include_once(\'././wp-includes/class-phpass.php\');

    global $wpdb, $formErr;

    if(1 > count($formErr->get_error_messages())){
        $hasher = new PasswordHash(8, TRUE);

        $table = $wpdb->prefix.\'finusers\';
        $results=$wpdb->get_row("SELECT * FROM $table WHERE email_address=\'$emailAdd\'");
        $hashed_pwd = $results->password;
        //echo $hashed_pwd;

        if($hasher->CheckPassword($password, $hashed_pwd)){
            echo "Password Match Sccuessfully";
        }else{
            echo "Failed to authenticate, please chc";
        }
    }
}
基本上:

添加了过滤器,以便覆盖wp\\u authenticate\\u userhook并定义自己的自定义身份验证函数。

使用$wpdb函数,将数据库中存储的电子邮件地址与用户在表单中输入的电子邮件地址进行匹配。

如果电子邮件地址与数据库中存储的电子邮件地址匹配,则提取并存储变量中的哈希密码,在本例中为$hashed\\u pwd,并将其与变量$password中存储的纯文本密码进行比较。如果密码匹配的用户已成功通过身份验证。

这里需要注意的一点是,可以添加另一个步骤。此步骤验证用户的电子邮件地址;检查电子邮件地址是否存在于custom table 在检查密码之前,请先访问WordPress数据库。

结束

相关推荐

Authentication/API Questions

我们正在尝试使用S2Member来管理我们的WP站点和我们正在启动的Flash程序的成员资格。我们希望在用户登录并保持登录状态时使用S2Member对其进行身份验证。问题:Java层需要知道哪个用户登录到Wordpress(如果有的话),以便它可以将正确的数据返回到flash层。建议的解决方案:Wordpress的cookie也应该包含在Flash到Java的请求中。Java可以使用这些cookie来查询Wordpress DB以获取用户ID。我们需要知道的是:1。是否可以从数据库或文件系统获取带有coo