使用POST请求自定义API时出现Error 401认证错误
问题:React前端调用C# API时出现401未授权错误
我和同学正在开发一个基于React和C#的预约类Web应用大学项目。同学开发的API支持用户提交数据并存入数据库,但我在前端提交数据时触发了Error 401错误。我已经确认JWT令牌和登录时获取的一致,而且用Postman测试这个API完全正常,但浏览器里用下面的代码就是不行。我是Web开发新手,求帮忙解决。
const handleSubmit = () => { const data = { userEmail: Cookies.get('email'), userPhoneNumber: phone, town: city, country: country, street: street, houseNumber: houseNumber, postalCode: postalCode, businessName: jobName, businessIdentificationNumber: 0, businessType: 0, businessActivities: [ { nameOfActivity: "string", descriptionOfActivity: "string", price: 0 } ], workingDays: Object.values(workingDays), startingHours: Object.values(workingHours).map(hours => hours.open), endingHours: Object.values(workingHours).map(hours => hours.close) }; fetch('http://localhost:8000/api/business/register', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + jwt }, body: JSON.stringify(data), }) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(data => { console.log('Success:', data); }) .catch((error) => { console.error('Error:', error); }); };
排查解决建议
- 验证JWT令牌有效性:在
fetch调用前添加console.log('当前JWT:', jwt),确认令牌不是空值、没有多余空格,格式完全是Bearer 令牌字符串的形式。 - 检查CORS配置:浏览器受跨域规则限制,Postman不受。和同学确认后端CORS是否允许携带
Authorization请求头,是否正确配置了允许的前端Origin地址。 - 确认令牌未过期:登录获取的令牌可能有有效期,对比Postman使用的令牌和前端存储的令牌的
exp(过期时间)字段,看是否已经失效。 - 核对用户身份匹配:确保前端使用的JWT令牌对应的用户,和
Cookies.get('email')获取的邮箱是同一用户,避免令牌和提交数据的用户不匹配。 - 检查后端认证逻辑:和同学确认后端的JWT验证规则,比如是否要求令牌包含特定的Claim(如用户角色、ID),Postman测试的令牌可能满足要求,但前端的令牌缺少必要信息。
内容的提问来源于stack exchange,提问作者Frane Krapić
相关产品推荐
相关产品推荐

