api POST Auth 始终 returns 200 但出现 401 错误
api POST Auth always returns 200 but has a 401 error
首先要说的是,我已经进行了广泛的研究,但不知道为什么当我使用 "wrong" 密码或用户登录时,网络身份验证状态显示为 200,但控制台报告错误:用户名无效或密码。所以它显示正确的错误,但有一个不正确的 200 状态。状态应该是 401。
或者,当我输入正确的信息时,它会更正凭据,并按预期为我提供令牌。问题是 200 状态应该是 401 状态。请帮我弄清楚为什么状态 returning 不正确。是的,它需要 return 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>
这也是开发人员所说的:
请求URL:http://ustylz.com/api/auth
请求方法:POST
状态码:200 OK
远程地址:xx.xx.1xx.2xx:xx
推荐人政策:降级时无推荐人
我希望当我使用不正确的用户名或密码单击 $login 按钮时,chrome 中的 DEVtools 将以红色显示 Auth 并具有 401 状态。
您不能在 echo 或任何输出后使用 "header"。 http_response_code 尝试在您回显错误后插入 header 参数。因此,响应代码为 200,并且在您的服务器日志文件中您会发现有关此问题的警告(除非禁用错误)。
首先要说的是,我已经进行了广泛的研究,但不知道为什么当我使用 "wrong" 密码或用户登录时,网络身份验证状态显示为 200,但控制台报告错误:用户名无效或密码。所以它显示正确的错误,但有一个不正确的 200 状态。状态应该是 401。
或者,当我输入正确的信息时,它会更正凭据,并按预期为我提供令牌。问题是 200 状态应该是 401 状态。请帮我弄清楚为什么状态 returning 不正确。是的,它需要 return 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>
这也是开发人员所说的:
请求URL:http://ustylz.com/api/auth 请求方法:POST 状态码:200 OK 远程地址:xx.xx.1xx.2xx:xx 推荐人政策:降级时无推荐人
我希望当我使用不正确的用户名或密码单击 $login 按钮时,chrome 中的 DEVtools 将以红色显示 Auth 并具有 401 状态。
您不能在 echo 或任何输出后使用 "header"。 http_response_code 尝试在您回显错误后插入 header 参数。因此,响应代码为 200,并且在您的服务器日志文件中您会发现有关此问题的警告(除非禁用错误)。