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

Express路由重定向异常:登录验证后无法跳转至目标页面

问题分析与解决方案

你遇到的问题核心是:登录验证通过后,服务器返回的重定向未生效,反而跳回登录页,这大概率是Cookie作用路径限制或前端提交方式未正确处理重定向导致的,以下是具体修复步骤:

1. 修复Cookie的配置错误

你的res.cookie存在两个问题:

  • 参数拼写错误:expire应为expires,浏览器无法识别错误的参数名,可能导致Cookie过期时间不生效
  • 未指定路径:默认情况下Cookie的作用路径是当前请求路径(即/login),跳转到/agendamentos时浏览器不会携带该Cookie,服务器因此判定未登录,重定向回登录页

修改后的Cookie设置代码:

res.cookie("userData", result.token, { 
  expires: new Date(Date.now() + 600000), // 正确的过期时间参数
  path: '/' // 让Cookie在整个站点路径下生效
});

2. 修正删除属性的代码错误

原代码中delete result.email, result.password仅会删除result.password(逗号运算符只执行最后一个表达式),正确删除多个属性的写法:

delete result.email;
delete result.password;

3. 根据前端提交方式调整处理逻辑

情况A:前端用原生HTML表单提交

确保表单的action和method配置正确:

<form action="/login" method="POST">
  <!-- 表单元素 -->
  <button type="submit">登录</button>
</form>

不要用JavaScript阻止表单的默认提交行为,否则浏览器不会跟随服务器返回的重定向响应跳转页面。

情况B:前端用AJAX/Fetch提交

AJAX请求会拦截服务器的重定向响应,不会自动触发页面跳转,需要在前端手动处理:

// 示例:Fetch提交方式
const form = document.querySelector('form');
form.addEventListener('submit', async (e) => {
  e.preventDefault();
  const formData = new FormData(form);
  
  const response = await fetch('/login', {
    method: 'POST',
    body: formData
  });

  if (response.ok) {
    // 登录成功,手动跳转页面
    window.location.href = '/agendamentos';
  } else {
    // 处理登录失败逻辑
    alert('登录失败');
  }
});

4. 验证修复效果

打开浏览器开发者工具(F12),切换到Application -> Cookies,检查userData的:

  • Path是否为/
  • Expires/Max-Age是否为预期的10分钟后
  • 是否在/agendamentos页面请求时携带该Cookie

内容的提问来源于stack exchange,提问作者João Pedro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:41:30