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

Laravel Sail share(Expose)搭配Jetstream+Inertia+Sanctum登录异常问询

Laravel 9.x Sail Share 登录419/无响应问题修复

问题现象

在搭载 Jetstream + Inertia + Sanctum 的 Laravel 9.x 项目中执行 sail share 时存在以下异常:

  • 可正常访问 XXXXXX.laravel-sail.site/login 加载登录页
  • 登录表单发起的POST请求可在Expose面板观测到,但要么始终挂起无响应,要么返回419 Page Expired错误,具体表现和配置调整有关
  • 公共HTTPS地址 https://XXXXXXXXX.laravel-sail.site 访问返回 ERR_CONNECTION_REFUSED,仅公共HTTP地址 http://XXXXXXXXX.laravel-sail.site:8080 可正常加载页面

当前本地初始配置:APP_URL 为 http://localhost,Expose 生成的服务信息如下:

  • 共享URL: host.docker.internal:80
  • 面板地址: http://127.0.0.1:4040
  • 公共HTTP地址: http://XXXXXXXXX.laravel-sail.site:8080
  • 公共HTTPS地址: https://XXXXXXXXX.laravel-sail.site

已尝试的无效操作

  • 在 .env 中将 SANCTUM_STATEFUL_DOMAINS 和 SESSION_DOMAIN 设置为公共URL时触发419错误;设置为localhost时POST请求无响应;测试过SANCTUM_STATEFUL_DOMAINS带端口、不带端口两种配置均无效
  • 将 SESSION_DRIVER 从 database 改为 cookie,仍返回419错误
  • 在 config/cors.php 中将 'supports_credentials' 设置为 true
  • 在 Kernel.php 中取消 \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class 的注释
  • 在 TrustProxies.php 中将 $proxies 设置为 protected $proxies = '*';

遗漏配置与修复步骤

按以下顺序调整配置即可解决问题:

  1. 修正.env核心参数
    将以下参数替换为对应值,严格遵守格式要求:

    APP_URL=http://XXXXXXXXX.laravel-sail.site:8080
    SESSION_SECURE_COOKIE=false
    SANCTUM_STATEFUL_DOMAINS=XXXXXXXXX.laravel-sail.site:8080
    SESSION_DOMAIN=XXXXXXXXX.laravel-sail.site
    

    配置说明:

    • SANCTUM_STATEFUL_DOMAINS 必须带上8080访问端口
    • SESSION_DOMAIN 不要带协议前缀、不要带端口
    • 由于使用HTTP协议访问公共地址,必须关闭SESSION_SECURE_COOKIE,否则浏览器不会在非HTTPS请求中携带会话cookie,直接触发CSRF校验失败。
  2. 补全受信代理头配置
    仅配置$proxies = '*'不足以让Laravel正确识别Expose转发的请求信息,需要同时在app/Http/Middleware/TrustProxies.php中配置信任所有转发头,修改后代码如下:

    <?php
    
    namespace App\Http\Middleware;
    
    use Illuminate\Http\Middleware\TrustProxies as Middleware;
    use Illuminate\Http\Request;
    
    class TrustProxies extends Middleware
    {
        protected $proxies = '*';
    
        protected $headers =
            Request::HEADER_X_FORWARDED_FOR |
            Request::HEADER_X_FORWARDED_HOST |
            Request::HEADER_X_FORWARDED_PORT |
            Request::HEADER_X_FORWARDED_PROTO |
            Request::HEADER_X_FORWARDED_AWS_ELB;
    }
    

    缺少该配置时,Laravel无法正确识别转发请求的域名、端口、协议,生成的CSRF令牌作用域和实际请求域名不匹配,会持续返回419错误。

  3. 清除缓存重启服务
    执行以下命令清除配置缓存,重启Sail服务后重新执行sail share即可正常登录:

    sail artisan config:clear
    sail artisan cache:clear
    sail restart
    

注:公共HTTPS地址返回连接拒绝是旧版Sail Share的已知问题,调试阶段直接使用8080端口的HTTP地址即可,不需要额外配置HTTPS相关参数。


内容的提问来源于stack exchange,提问作者Tim Gieseking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:09:27