客户端Authorization头设置正确,后端获取却为undefined的问题
核心问题:Authorization头格式不符合标准
你当前在SvelteKit Server Action中直接将JWT字符串添加到Authorization头,而标准的Bearer认证格式要求携带Bearer 前缀,后端可能因格式不识别,导致无法正确读取该头。
修复步骤
- 修正前端Authorization头的格式
在+page.server.ts的deleteBudgetaction中,修改Authorization头的添加方式:
// 原代码 headers.append("Authorization", jwt); // 修改为 headers.append("Authorization", `Bearer ${jwt}`);
- 后端验证头的读取逻辑
在Express后端的接口中,确保通过正确的键读取请求头(Express会自动将所有请求头转为小写):
// 后端接口示例 app.delete('/api/budget/:id', (req, res) => { // 读取Authorization头 const authHeader = req.headers.authorization; if (!authHeader || !authHeader.startsWith('Bearer ')) { return res.status(401).json({ message: '未提供有效令牌' }); } const token = authHeader.split(' ')[1]; // 后续token验证逻辑 });
额外排查点
- CORS配置检查:如果Express后端启用了CORS,需确保配置允许
Authorization请求头:
const cors = require('cors'); app.use(cors({ origin: 'http://localhost:5173', // 你的SvelteKit项目地址 allowedHeaders: ['Authorization', 'Content-Type'], credentials: true }));
- Server Action中的浏览器API问题:
location.reload()是浏览器端API,不能在Server Action中直接使用,应替换为SvelteKit的redirect方法:
// 原代码 location.reload(); // 修改为 throw redirect(302, "/dashboard");
内容的提问来源于stack exchange,提问作者Math_Novice
相关产品推荐
相关产品推荐

