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,并且在您的服务器日志文件中您会发现有关此问题的警告(除非禁用错误)。