首先,我说我已经进行了广泛的研究,但是不知道为什么我使用“错误”密码或用户登录时网络身份验证状态为200,但控制台报告错误:用户名或密码无效。因此它显示正确的错误,但状态为200,这是不正确的。状态应为401。
或者,当我输入正确的信息时,它会提供正确的凭据,这将为我提供预期的 token 。问题是200状态应该是401状态。请帮助我弄清楚为什么状态无法正确返回。是的,需要返回401,以便我的代码的另一部分正确执行。
这是它所说的图像:
这是我的POST授权代码(减去连接的DB连接):
<?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>
开发人员也是这样说的:
要求网址:http://ustylz.com/api/auth
请求方法:POST
状态码:200 OK
远程地址:xx.xx.1xx.2xx:xx
推荐人政策:降级时不推荐人
我希望当我用错误的用户名或密码单击$ login按钮时,Chrome中的DEVtools将以红色显示Auth并具有401状态。
最佳答案
回显或任何输出后不能使用“标题”。回显错误后,http_response_code尝试插入 header 参数。因此,响应代码为200,并且在服务器日志文件中,您将找到关于此问题的警告(除非禁用了错误)。
关于api - api POST Auth始终返回200,但出现401错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54242458/