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

已设置Session Storage的redirectUrl,后端登录接口无法获取该值

问题根源

sessionStorage是浏览器端的本地存储,后端Node.js完全无法直接读取它的内容,所以你用request.body.redirectUrl或request.session.redirectUrl肯定拿不到值。

解决方案:把跳转路径通过查询参数传递并提交

步骤1:修改products.ejs的跳转逻辑,携带redirectUrl到登录页

把跳转/login的代码改成带查询参数的形式,用encodeURIComponent处理URL避免编码问题:

// products.ejs中的脚本修改部分
if (loggedInData === 'false') {
    event.preventDefault();
    const currentPageUrl = window.location.href;
    // 带查询参数跳转到登录页
    window.location.href = `/login?redirectUrl=${encodeURIComponent(currentPageUrl)}`;
}

步骤2:在login.ejs的登录表单中添加隐藏字段,传递redirectUrl

在登录表单里加入一个隐藏输入框,把URL参数存进去,这样POST请求时会把这个值提交给后端:

<!-- login.ejs的表单内添加 -->
<input type="hidden" name="redirectUrl" value="<%= request.query.redirectUrl || '/' %>">

步骤3:修改后端/login接口,获取并使用redirectUrl

在POST接口里从request.body获取redirectUrl,没有的话默认重定向到/:

// index.js的/login POST接口修改部分
if (results.length > 0) {
    request.session.loggedin = true;
    request.session.username = username;
    request.session.id = results[0].id;
    // 获取redirectUrl,默认值设为/
    let redirectUrl = request.body.redirectUrl || '/';
    // 解码URL,避免编码问题
    redirectUrl = decodeURIComponent(redirectUrl);
    response.redirect(redirectUrl);
}
替代方案:用后端Session存储跳转路径

如果不想用查询参数,也可以先通过AJAX把redirectUrl发送到后端存入session,再跳转登录页:

  1. 在products.ejs里添加AJAX请求:
// products.ejs脚本修改
if (loggedInData === 'false') {
    event.preventDefault();
    const currentPageUrl = window.location.href;
    // 发送请求把路径存到后端session
    fetch('/set-redirect-url', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({ redirectUrl: currentPageUrl })
    }).then(() => {
        window.location.href = '/login';
    });
}
  1. 在index.js里添加对应的接口:
// index.js新增接口
app.post('/set-redirect-url', (req, res) => {
    req.session.redirectUrl = req.body.redirectUrl;
    res.sendStatus(200);
});
  1. 在/login POST接口里读取session中的值:
let redirectUrl = req.session.redirectUrl || '/';
// 用完后可以清除,避免后续影响
delete req.session.redirectUrl;
response.redirect(redirectUrl);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:29:49