为何Postman中Auth::check()返回true,浏览器调用Laravel登出接口时返回false
问题根因与解决方案
核心错误
你的前端axios.post调用参数位置错误,导致Authorization请求头根本没有被正确发送到后端。axios.post的语法规则是axios.post(请求地址, 请求体数据, 配置项),第二个参数是要提交的请求体,第三个参数才是包含headers的配置对象。你现在把headers放在了第二个参数的位置,只会作为请求体提交,不会被识别为请求头,后端自然拿不到token,鉴权失败。
修复后的前端代码
const logout = () => { const headers = { "Accept" : "application/json", "Authorization" : `Bearer ${localStorage.getItem('token')}` }; // 第二个参数传空对象作为请求体,第三个参数传headers配置 axios.post('http://website.test/api/logout', {}, {headers}) .then(res => { console.log(res); }).catch(err => { console.log(err); }); };
其他排查方向
如果修改后问题仍然存在,可以按以下步骤排查:
- 确认token正确性:在构造headers前添加
console.log(localStorage.getItem('token')),和Postman中使用的token对比,检查是否存在undefined、多余空格/换行、内容不一致的问题 - 检查跨域配置:如果前端域名和后端API域名不一致,需要后端配置CORS规则,允许
Authorization请求头跨域传递,否则浏览器会自动拦截该请求头 - 确认请求头传递情况:可以在后端接口开头添加
dd($request->header('Authorization'));,分别用Postman和浏览器发起请求,对比返回的头内容是否一致,快速定位是否是请求头传递问题 - 检查Laravel鉴权配置:确认
config/auth.php中api guard的驱动和你生成token的方式(Passport/Sanctum)匹配
内容的提问来源于stack exchange,提问作者sp92
相关产品推荐
相关产品推荐

