Login logic [1]

DATE : 2023/11/10

Login Logic에서 살펴봤던 내용을 이번엔 코드로 직접 구현해보자.

Login logic [1] :

  • 식별과 인증을 따로 진행할 것

  • 비밀번호는 따로 hash 처리하지 않은 상황

login logic과 관련해 작성할 코드 5개와 함께 사용할 간단한 HTML을 준비해준다!

[ login_form.html ]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="./login_logic1.php" method="post">
        <input type="text" name="user">
        <input type="password" name="password">
        <input type="submit" value="LOGIN">
    </form>
</body>
</html>

여기서 사용할 페이지는 특별히 스타일은 입히지 않고

필요한 요소를 갖추기만 할 것이다.

[ login_logic1.php ]

<?php
    require_once("db_connection.php");
    $username = $_POST['user'];
    $user_pass = $_POST['password'];

    $sql = "select password from user where username='$username'"; // 식별

    $res = mysqli_query($conn, $sql);

    if(mysqli_num_rows($res) == 0) { // 식별 결과 없음
        echo '<script>alert("User".$username." do not exist.")</script>';
    }

    $db_pass = mysqli_fetch_array($res)['password'];

    if($db_pass == $user_pass) { //인증
        echo '<script>alert("Login Success")</script>';
    } else {
        echo '<script>alert("Login Fail")</script>';
    }
?>

첫 번째로 살펴볼 로직은 식별과 인증을 따로 진행한다.

DB와 연결하는 부분은 따로 import하고 여기서 주로 다루지는 않겠다.

먼저, $_POST로 들어간 사용자의 username & password를 변수에 할당하고

식별 과정을 수행한다.

그 말은 사용자가 입력한 username을 이용해 여러 사용자의 정보가 들어있을 DB에서

username과 일치하는 정보의 row만 찾아오겠다는 의미이다.

이를 위해 실행한 SQL은 바로 select문!

SELECT password FROM user WHERE username = '$username'

SQL의 결과로 식별을 통해 특정 사용자에 대한 비밀번호를 얻어오게 된다.

여기서 비밀번호는(=db_pass) 사용자가 로그인할 때 입력한 Username과 짝꿍인 정보로

if($db_pass == $user_pass) {
        ...
} else {
        ...
}

사용자가 입력한 비밀번호와 이 값과 동일하다면

자신이 주장하는 인물이 본인임을 인증했다고 할 수 있다.

이전에 사용했던 DB로 테스트해보면

hanhxx:hanhxx1234를 입력한 경우,

(1) username = hanhxx인 SQL 결과로 hanhxx1234를 db_pass에 할당하게 되고

(2) db_pass와 사용자가 입력한 hanhxx1234를 비교했으니 "Login success"가 나오게 될 것이다.


만약 username은 hanhxx인데 비밀번호가 틀리게 된다면

인증을 하지 못한 경우이기 때문에 로그인에 실패하게 된다.

Last updated