채택완료
제가 로그인 기능을 만들려고 하고 있는데 잘 안되서 물어봅니다
제가 사이트 로그인을 만들어 볼려고 하는데 js랑 php를 사용해서 만들고 있었는데 테스트를 해보니까 모든 입력값이 전부 ok되지만 실질적으로 정해둔 사이트로 옮겨지지 않습니다 계정 정보는 sql에 저장하고 있고 비밀번호는 암호화(해싱)하여 저장하고 있습니다 chatgpt로도 안되는 문제라 이렇게 직접 작성합니다
html
Copy
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>로그인</title>
<link rel="stylesheet" href="login.css" />
<script src="login.js"></script>
</head>
<body>
<div class="login-container">
<h1 style="margin-bottom:100px;">LOGIN</h1>
<form id="login-form" class="form-group" action="/login" method="POST">
<div class="input-container">
<label for="id">아이디</label>
<input type="text" id="id" name="id" required />
</div>
<div class="input-container">
<label for="password">비밀번호</label>
<input type="password" id="password" name="password" required />
<div id="error-message" class="error-message">*아이디나 비밀번호가 잘못되었습니다</div>
</div>
<button type="submit" class="btn">로그인</button>
<a href="sign_up.html" style="color:white;">회원가입</a>
</form>
</div>
</body>
</html>
js
Copy
function validateForm() {
const id = document.getElementById('id').value;
const password = document.getElementById('password').value;
if (id === password) {
window.location.href = '/chat';
return true;
} else {
document.getElementById('error-message').style.display = 'block';
return false;
}
}
php
Copy
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$id = $_POST['id'];
$password_input = $_POST['password'];
$host = '호스트';
$user = "유저";
$password_db = "비밀번호";
$database = "디비";
$port = '포트';
$conn = mysqli_connect($host, $user, $password_db, $database, $port);
if (!$conn) {
die('MySQL 연결 실패: ' . mysqli_connect_error());
}
$query = "SELECT * FROM users WHERE id='$id'";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_assoc($result);
if ($row) { // 사용자 정보가 존재하는 경우
if (password_verify($password_input, $row['password'])) {
$_SESSION['id'] = $id;
header('Location: /chat.html');
exit();
} else {
echo '<script>alert("아이디 또는 비밀번호가 일치하지 않습니다.");</script>';
echo '<script>document.getElementById("id").classList.add("error");</script>';
echo '<script>document.getElementById("password").classList.add("error");</script>';
}
} else {
echo '<script>alert("사용자가 존재하지 않습니다.");</script>';
echo '<script>document.getElementById("id").classList.add("error");</script>';
echo '<script>document.getElementById("password").classList.add("error");</script>';
}
mysqli_close($conn);
}
?>
|
답변 4개
채택된 답변
+20 포인트
1.PHP 코드에서 header() 함수를 이용해 페이지 이동을 할 때, 경로를 잘못 입력한 부분이 있습니다.
chat.html 대신에 chat로 수정해야 합니다.
2.비밀번호를 비교할 때, password_verify() 함수를 이용해 암호화된 비밀번호를 비교해야 하는데,
현재 코드에서는 암호화하지 않은 비밀번호를 비교하고 있습니다.
따라서, 사용자가 입력한 비밀번호를 password_hash() 함수를 이용해 암호화한 뒤,
암호화된 비밀번호를 데이터베이스에서 가져와 비교해야 합니다.
다음은 수정된 PHP 코드입니다.
Copy
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$id = $_POST['id'];
$password_input = $_POST['password'];
$host = '호스트';
$user = "유저";
$password_db = "비밀번호";
$database = "디비";
$port = '포트';
$conn = mysqli_connect($host, $user, $password_db, $database, $port);
if (!$conn) {
die('MySQL 연결 실패: ' . mysqli_connect_error());
}
$query = "SELECT * FROM users WHERE id='$id'";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_assoc($result);
if ($row) { // 사용자 정보가 존재하는 경우
if (password_verify($password_input, $row['password'])) {
$_SESSION['id'] = $id;
header('Location: /chat');
exit();
} else {
echo '<script>alert("아이디 또는 비밀번호가 일치하지 않습니다.");</script>';
echo '<script>document.getElementById("id").classList.add("error");</script>';
echo '<script>document.getElementById("password").classList.add("error");</script>';
}
} else {
echo '<script>alert("사용자가 존재하지 않습니다.");</script>';
echo '<script>document.getElementById("id").classList.add("error");</script>';
echo '<script>document.getElementById("password").classList.add("error");</script>';
}
mysqli_close($conn);
}
?>
챗GPT 답변입니다.
답변을 작성하려면 로그인이 필요합니다.