登录后自动跳转回原页面是码上飞AI保障操作连贯性的核心体验;前端拦截未登录请求并存当前URL至localStorage,登录成功后校验并跳转该URL,后端需配合校验redirect参数防开放重定向。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

登录后自动跳转回用户点击登录前所在的页面,是码上飞AI保持操作连贯性的核心体验。如果登录完成直接回到首页,用户要重新点击菜单、翻找内容、重填表单,会明显打断工作流。
前端拦截未登录跳转请求
在用户点击需要登录权限的按钮或链接时,前端不直接发起请求,而是先检测登录态。未登录时,把当前完整URL(含hash和query参数)存入localStorage,键名为redirect_url。这一步必须在跳转发生前完成,否则页面已离开,无法捕获原位置。
调用window.location.href = '/login'触发跳转。注意不要用router.push('/login')(如Vue Router),否则可能丢失浏览器历史栈中的上一页信息,导致返回逻辑失效。
登录成功后读取并跳转
登录接口返回成功响应后,前端立即从localStorage中读取redirect_url值。如果该值存在且非空,就执行跳转;否则跳转至默认首页。
跳转前需校验redirect_url是否属于本站域名下的路径,防止开放重定向漏洞。可用正则^\/[^\s]*$匹配以/开头、不含协议和域名的相对路径,或白名单校验前缀如/project//doc//api/等业务路径。
执行跳转:window.location.href = redirectUrl。这会完全刷新页面,确保新页面加载时携带最新登录态,避免因缓存导致权限判断错误。
后端配合透传原始Referer(备用方案)
方法一:登录页服务端渲染时,从HTTP请求头的Referer字段提取来源路径,注入到登录表单隐藏域中。提交登录时,该值随表单一起提交。
方法二:登录接口接收一个可选参数redirect,前端在跳转到登录页时手动拼接,例如/login?redirect=%2Fproject%2Fedit%3Fid%3D123。后端验证该参数安全性后,在登录成功响应中以JSON形式返回{"redirect":"/project/edit?id=123"},前端据此跳转。
【关键前提】后端必须对redirect参数做严格校验:仅允许以/开头、不包含://、不以http或javascript:开头,否则直接忽略并跳首页。











