You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Sanctum配置及认证接口内存耗尽500错误求助

Laravel Sanctum配置及认证接口内存耗尽500错误求助

嘿,我来帮你分析下这个问题!首先看到你遇到的是内存耗尽的500错误,结合你的Sanctum配置,咱们一步步排查:

1. 先解决最直接的内存限制问题

你看到的Allowed memory size of 134217728 bytes exhausted就是说PHP的内存限制只有128MB,Laravel在处理Sanctum认证的时候可能因为某些逻辑(比如模型加载、异常处理)占用了超过这个值的内存。你可以先尝试调高内存限制:

  • 如果是用Apache服务器,在项目根目录的.htaccess文件里添加:php_value memory_limit 256M
  • 如果是Nginx或者CLI运行,修改你的php.ini文件,找到memory_limit项改成memory_limit = 256M,改完记得重启服务
  • 临时方案可以在public/index.php的最顶部加上:ini_set('memory_limit', '256M');

先试试这个,如果调高后不再报错,那说明确实是内存不够用导致的;如果还是报同样的错,那咱们再看Sanctum的配置问题。

2. 排查Sanctum的认证配置

检查Auth Guard的驱动配置

你的sanctum.php里设置了'guard' => ['api'],那你得确保config/auth.php里的api guard是用的sanctum驱动,不然Sanctum在认证的时候会找不到正确的用户提供者,可能陷入循环导致内存溢出:

// config/auth.php
'guards' => [
    'api' => [
        'driver' => 'sanctum', // 必须是sanctum驱动
        'provider' => 'users',
    ],
],

调整Session Domain配置

你.env里的SESSION_DOMAIN=*虽然看起来兼容所有域名,但有时候通配符会导致Cookie的作用域异常,Sanctum无法正确识别Cookie里的token,进而反复尝试认证消耗内存。建议改成具体的域名,和SANCTUM_STATEFUL_DOMAINS保持一致,比如:

SESSION_DOMAIN=localhost

检查Cookie加密的中间件冲突

你的sanctum.php里的middleware包含了encrypt_cookies,要确保你手动设置的access_tokenCookie没有被重复加密。另外,确认App\Http\Middleware\EncryptCookies里的$except数组没有把access_token排除在外(因为Sanctum的token存在Cookie里需要加密):

// App\Http\Middleware\EncryptCookies.php
protected $except = [
    // 不要在这里添加access_token
];

3. 检查Postman的请求设置

因为你的CORS配置里supports_credentials是true,所以在Postman里请求的时候,必须开启“Send cookies”选项(也就是启用withCredentials)。如果请求没带Cookie,Sanctum认证失败的异常处理逻辑可能出现问题,导致内存耗尽。你可以在Postman的请求设置里找到“Cookies”选项,确保启用,或者在请求头里手动带上Cookie。

4. 排查用户模型的潜在问题

如果你的User模型里有复杂的关联关系,或者在模型的boot方法里有自动加载的逻辑,可能在Sanctum认证的时候触发了无限循环(比如关联模型互相引用),导致内存耗尽。你可以暂时注释掉User模型里的关联方法,测试一下user-data接口是否正常,如果正常,再逐步排查哪个关联有问题。

先从调高内存限制开始验证,这个是最快的排查步骤,希望能帮到你!

备注:内容来源于stack exchange,提问作者php_man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 08:43:02