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

如何防止NextJS登录后用户凭证显示在URL中

问题分析与解决方案

核心问题

URL中出现邮箱、密码参数,说明登录表单触发了浏览器默认的GET提交行为,直接覆盖了你编写的handleSubmit里的POST请求逻辑,导致跳转异常。

具体修复步骤

1. 阻止表单默认提交行为

修改handleSubmit函数,接收事件参数并调用preventDefault(),彻底拦截浏览器的默认提交动作:

async function handleSubmit(e) {
  e.preventDefault(); // 关键:阻止默认GET提交
  console.log(state);
  const res = await fetch(LOGIN_API_BASE_URL, {
    method: "POST",
    body: JSON.stringify(state),
    headers: {
      "Content-Type": "application/json",
    },
    credentials: "omit",
  });
  if (res.ok) {
    const json = await res.json();
    localStorage.setItem("token", json.token);
    router.push("/"); 
  } else {
    alert("Bad credentials");
  }
}

2. 修正表单标签配置

确保登录表单显式设置method="post",并正确绑定onSubmit事件:

<form onSubmit={handleSubmit} method="post">
  {/* 邮箱输入框 */}
  {/* 密码输入框 */}
  <button type="submit">登录</button>
</form>

3. 确认输入框状态绑定

检查输入框的onChange逻辑是否正确更新state(虽然控制台显示state正常,但需确保绑定无遗漏):

<input
  type="email"
  value={state.email}
  onChange={(e) => setState(prev => ({...prev, email: e.target.value}))}
/>
<input
  type="password"
  value={state.password}
  onChange={(e) => setState(prev => ({...prev, password: e.target.value}))}
/>

验证方式

修复后点击登录按钮,浏览器URL不会出现凭证参数,POST请求正常发送,Token存入localStorage后将自动跳转至首页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:52:09