api - api POST Auth始终返回200,但出现401错误

标签 api authentication post error-handling httpresponse

首先,我说我已经进行了广泛的研究,但是不知道为什么我使用“错误”密码或用户登录时网络身份验证状态为200,但控制台报告错误:用户名或密码无效。因此它显示正确的错误,但状态为200,这是不正确的。状态应为401。

或者,当我输入正确的信息时,它会提供正确的凭据,这将为我提供预期的 token 。问题是200状态应该是401状态。请帮助我弄清楚为什么状态无法正确返回。是的,需要返回401,以便我的代码的另一部分正确执行。

这是它所说的图像:

the Devtools

这是我的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/

相关文章:

api - 当从具有超媒体约束的 REST API 提供响应时,如何向客户端指示要使用的 HTTP 方法(动词)?

php - 如何从php中的json输出中删除反斜杠

angular - .net core 和 Angular 的预检响应中的 Access-Control-Allow-Headers 不允许请求 header 字段授权

ruby-on-rails - 授予 API 访问 Rails 应用程序的最佳身份验证方法

Java httpserver 在收到 POST 请求时崩溃

c# - Post请求为空(ASP.NET Core)

java - Google Apps 脚本是否可以通过 HTTP POST 接收文件?

java - 从 java 代码调用 Snarl

security - 如何确定用于运行我的网站的安全帐户?

java - 是否有使用 WordNet 的任何简单的基于 Java 的词义消歧?