使用Laravel Auth Sanctum时套接字挂起,后续请求被拒求助
Laravel Sanctum认证请求引发套接字挂起及服务器拒绝请求的排查方向
登录和注册功能正常,但发起带auth:sanctum中间件的认证请求时,出现套接字挂起,后续所有请求均被拒绝,报错如下:
Error: connect ECONNREFUSED 127.0.0.1:8000 Error: socket hang up
受保护路由代码:
Route::group(['middleware' => 'auth:sanctum'], function () { Route::get('/test', [ApiController::class, 'test']); });
测试方法代码:
public function test(Request $request){ return "hello world"; }
未添加认证中间件时,/test路由可正常响应,问题出在认证流程中,以下是几个可能的原因:
- 认证逻辑触发死循环:检查认证相关的中间件、用户Provider或模型方法(比如
authenticate、getAuthIdentifier)里,有没有发起对本地服务器的请求(比如获取用户附加数据时调用了自身API),这种嵌套请求会导致套接字挂起,直接堵死服务器。 - 认证过程耗竭服务器资源:如果认证逻辑里有内存泄漏、大量同步阻塞操作,单次请求就把服务器进程的内存或CPU占满,后续请求自然无法被处理。可以用
top命令看服务器资源占用,或者查storage/logs/laravel.log里有没有内存溢出的报错。 - Session与Token认证冲突:如果同时开了Web会话和Sanctum API认证,Cookie会话和Token认证可能互相干扰,导致服务器处理认证时异常。确保API请求用
Authorization: Bearer {token}头,不要依赖Web Cookie;另外检查.env里的SESSION_DRIVER,API场景建议用file或redis,别用cookie。 - Sanctum配置错误:打开
config/sanctum.php,检查stateful配置项,前端域名必须在这个列表里,否则会话处理会出问题;同时确认SANCTUM_STATEFUL_DOMAINS环境变量有没有正确设置。 - 认证时抛出未捕获异常:认证流程里有未处理的致命错误,直接把Laravel进程搞崩了,后续请求自然连不上。去
storage/logs/laravel.log看最新日志,有没有Fatal Error或者未捕获的异常,比如用户模型关联错误、权限检查逻辑抛错等。 - 服务器端口监听异常:虽然初始请求正常,但认证请求触发了进程意外退出,端口没释放。试试重启Laravel开发服务器,或者用
netstat -tulpn | grep 8000检查端口占用,确保只有一个Laravel进程在监听8000端口。
内容的提问来源于stack exchange,提问作者sempakonka
相关产品推荐
相关产品推荐

