响应发送 200 而不是 403

Response sending 200 instead of 403

我有一个中间件检查用户是否通过 firebase 登录。如果 firebase 无法授权用户,它会发送一条带有 403 状态代码的消息。

这是我的代码:

import { NextFunction, Request, Response } from "express";
import firebase from "../config/firebase/index";

async function authMiddleware(req: Request, res: Response, next: NextFunction) {
  const headerToken = req.headers.authorization;
  if (!headerToken) {
    return res.send({ message: "No token provided" }).status(401);
  }

  if (headerToken && headerToken.split(" ")[0] !== "Bearer") {
    res.send({ message: "Invalid token" }).status(401);
  }

  const token = headerToken.split(" ")[1];

  try {
    await firebase.auth().verifyIdToken(token);
    next();
  } catch (error) {
    res.send({ message: "Could not authorize" }).status(403);
  }
}

export = authMiddleware;

当我向路由发出请求时,会调用此中间件。我尝试发送错误的 jwt,得到的响应是 message: "Could not authorize",但状态代码是 200 而不是 403.

当我将 return 状态代码更改为 401 时,响应会给出正确的 401 状态。

我哪里做错了,我怎样才能让状态码变成403? (我试过邮递员和 chrome)

send() 方法 returns 响应在 status(403) 更新之前默认状态为 200。您必须在发送响应之前使用 status() 来设置状态:

res.status(403).send({ message: "Could not authorize" });