简体   繁体   English

使用户名和密码输入区分大小写

[英]Make Username and Password Input Case Sensitive

Hi I would like to add here a case sensitive error trap on my login function, by the way i am using MVC FRAMEWORK anyone be of help?您好,我想在我的登录名 function 中添加一个区分大小写的错误陷阱,顺便说一句,我正在使用 MVC FRAMEWORK 任何人都可以帮忙吗? I want to make the username and password case sensitive so that is the input doesn't match an error exception will occur............... I have tried but failed maybe someone can assist me on hot to go about this dilemma我想让用户名和密码区分大小写,这样输入不匹配就会发生错误异常......我已经尝试但失败了也许有人可以帮助我热到 go 关于这个困境

//THIS IS THE CODE OF MY CONTROLLER


public function login() {
        if(isLoggedIn()) {
            header("Location: " .URLROOT . "/");
        }
        $data = [
            'title' => 'Login page',
            'username' => '',
            'password' => '',
            'usernameError' => '',
            'passwordError' => ''
        ];

    

        //Check for post
        if($_SERVER['REQUEST_METHOD'] == 'POST'){
            //Sanitize post data
            $_POST = filter_input_array(INPUT_POST);

            $data = [
                'username' => trim($_POST['username']),
                'password' => trim($_POST['password']),
                'usernameError' => '',
                'passwordError' => '',
            ];
            $findUser = $this->userModel->findUser($data);


            //Validate username
            if(empty($data['username'])){
                $data['usernameError'] = 'Please enter a username.';
            }else if($findUser === false){
                $data['usernameError'] = "Username not registered";
            }

            //Validate username
            if(empty($data['password'])){
                $data['passwordError'] = 'Please enter a password.';
            }else if($findUser === false){
                $data['passwordError'] = "Password not registered";
            }
           

            $findUser = $this->userModel->getUserDetails($data);



            //Check if all errors are empty
            if(empty($data['usernameError']) && empty($data['passwordError'])){
                $loggedInUser = $this->userModel->login($data['username'], $data['password']);

                if($loggedInUser){
                    $this->createUserSession($loggedInUser);
                }else {
                    $data['passwordError'] = 'Password is incorrect. Please try again.';

                    $this->view('users/login',$data);
                }


            }
            
        }else{
            $data = [
                'username' => '',
                'password' => '',
                'usernameError' => '',
                'passwordError' => ''
            ];
        }



//THIS IS THE CODE OF MY MODEL



public function login($username, $password) {
        $this->db->query('SELECT * FROM user WHERE username = :username');

        //Bind value
        $this->db->bind(':username', $username);

        $row = $this->db->single();

        $hashedPassword = !empty($row) ? $row->password:'';

        if(password_verify($password, $hashedPassword)){
            return $row;
        }else {
            return false;
        }
    }


        $this->view('users/login', $data);
    }

Case sensitive error trap区分大小写的错误陷阱

If you need to make a case-sensitive query, it is very easy to do using the BINARY operator, which forces a byte by byte comparison:如果需要进行区分大小写的查询,使用 BINARY 运算符非常容易,它强制逐字节比较:

SELECT * FROM `table` WHERE BINARY `column` = 'value'

The password is already case-sensitive, since it's using the native password_hash and password_verify functions, it can be easily tested with:密码已经区分大小写,因为它使用本机password_hashpassword_verify函数,可以很容易地测试它:

var_dump(password_verify('AAA', password_hash('AAA', PASSWORD_DEFAULT))); // true
var_dump(password_verify('AAA', password_hash('aaa', PASSWORD_DEFAULT))); // false

If you really want to have the username case-sensitive, you can also use a case-sensitive collation for the username field, such as utf8mb4_0900_as_cs , more info here .如果你真的想让用户名区分大小写,你也可以对用户名字段使用区分大小写的排序规则,例如utf8mb4_0900_as_cs ,更多信息在这里

ALTER TABLE `users` CHANGE COLUMN `username` `username` VARCHAR(255) CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_0900_as_cs' NOT NULL;

Test case:测试用例:

INSERT INTO `users` (`username`) VALUES ('test');

SELECT * FROM `users` WHERE `username`='TEST'; /* returns nothing as expected */

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM