Позвольте мне сначала сказать, что я много исследовал и понятия не имею, что происходит, почему, когда я вхожу с «неправильным» паролем или пользователем, сетевой статус авторизации говорит 200, но консоль сообщает об ошибке: Неверное имя пользователя или пароль. Таким образом, он показывает правильную ошибку, но имеет статус 200, который является неправильным. Статус должен быть 401.
в качестве альтернативы, когда я ввожу правильную информацию, это корректные учетные данные, это дает мне токен, как и ожидалось. Проблема в статусе 200, когда это должен быть статус 401. Пожалуйста, помогите мне выяснить, почему статус не возвращается правильно. И ДА НУЖНО вернуть 401, чтобы другая часть моего кода работала правильно.
Вот изображение того, что оно говорит:
Вот мой код авторизации POST (за исключением соединения с БД, которое подключается):
<?php
if ($_SERVER['REQUEST_METHOD'] == "GET") {
if ($_GET['url'] == "auth") {
} else if ($_GET['url'] == "users") {
}
} else if ($_SERVER['REQUEST_METHOD'] == "POST") {
if ($_GET['url'] == "auth") {
$postBody = file_get_contents("php://input");
$postBody = json_decode($postBody);
$username = $postBody->username;
$password = $postBody->password;
if ($db->query('SELECT username FROM users WHERE username=:username', array(':username'=>$username))) {
if (password_verify($password, $db->query('SELECT password FROM users WHERE username=:username', array(':username'=>$username))[0]['password'])) {
$cstrong = True;
$token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong));
$user_id = $db->query('SELECT id FROM users WHERE username=:username', array(':username'=>$username))[0]['id'];
$db->query('INSERT INTO login_tokens VALUES (\'\', :token, :user_id)', array(':token'=>sha1($token), ':user_id'=>$user_id));
echo '{ "Token": "'.$token.'" }';
} else {
echo '{ "Error": "Invalid username or password!" }';
http_response_code(401);
}
} else {
echo '{ "Error": "Invalid username or password!" }';
http_response_code(401);
}
}
}
?>
Вот мой код формы:
<script type="text/javascript">
$('#login').click(function() {
$.ajax({
type: "POST",
url: "api/auth",
processData: false,
contentType: "application/json",
data: '{ "username": "'+ $("#username").val() +'", "password": "'+ $("#password").val() +'" }',
success: function(r) {
console.log(r)
}
});
});
</script>
Также вот что говорит dev:
URL запроса: http://ustylz.com/api/auth
Способ запроса: POST
Код состояния: 200 ОК
Удаленный адрес: xx.xx.1xx.2xx: xx
Политика реферера: no-referer-when-downgrade
Я ожидаю, что когда я нажму кнопку $ login с неверным именем пользователя или паролем, DEVtools в chrome покажет Auth красным цветом и будет иметь статус 401.