You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Insomnia登录验证正常,前端验证失效:输错账号密码仍跳转首页

问题解决:错误账号密码前端仍跳转首页

问题原因

后端在账号不存在或密码错误时,返回的是200状态码+错误信息JSON,而axios只有当HTTP状态码为4xx/5xx时才会进入catch块。所以前端无论请求结果是否成功,都会执行try块里的navigate("/"),导致错误情况下也跳转到首页。

修复步骤

1. 修改后端代码:错误场景返回对应HTTP状态码

把错误响应的状态码改为4xx,让axios能识别这是错误请求:

router.post("/login", async (req,res) =>{
    const { username, password } = req.body;
    const user = await UserModel.findOne({username});

    if (!user) {
        // 用户不存在返回404状态码
        return res.status(404).json({message: "User doesn't exist!"});
    }
    const checkpass = await bcrypt.compare(password, user.password);

    if(!checkpass){
        // 密码错误返回401未授权状态码
        return res.status(401).json({message: "Username or Password is Incorrect!"});
    }

    const token = jwt.sign({id: user._id}, "secret");
    res.json({ token, userID: user._id});
});

2. 修改前端代码:处理错误提示并阻止跳转

在catch块里捕获错误,提示用户,同时不要执行跳转逻辑;另外也可以在try块里判断是否拿到token,确保只有登录成功才跳转:

const Auth = (props) => {
  props.funcNav(false)
  
  const [_, setCookies] = useCookies(["access_token"]);
  const [username, setUsername] = useState("");
  const [password, setPassword] = useState("");
  const navigate = useNavigate();

  const handleSubmit = async (event) => {
    event.preventDefault();

    try {
      const result = await axios.post("http://localhost:5174/auth/login", {
        username,
        password,
      });
      // 确认返回数据包含token才执行登录逻辑
      if (result.data.token) {
        setCookies("access_token", result.data.token);
        window.localStorage.setItem("userID", result.data.userID);
        navigate("/");
      } else {
        alert(result.data.message || "登录失败");
      }
    } catch (error) {
      // 捕获后端返回的错误信息并提示
      alert(error.response?.data?.message || "登录出错,请重试");
      console.error(error);
    }
  }
}

额外说明

如果不想修改后端状态码,也可以在前端try块里直接判断返回的result.data是否包含token:如果没有,就提示错误信息,不执行跳转逻辑。但规范的做法是后端用HTTP状态码区分成功/错误请求,这样更符合RESTful设计原则。

内容的提问来源于stack exchange,提问作者Diego Sanchez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:33:09