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

Laravel 11自定义Auth下Reverb广播/auth接口返回403问题求助

排查 Laravel 11 Reverb broadcasting/auth 403 Forbidden 问题

以下是针对你的场景的具体排查步骤:

  • 确认自定义认证中间件有效性
    检查simple_auth中间件是否正确完成Bearer Token解析与用户绑定:

    1. 确保中间件内已将认证通过的用户实例注入Laravel认证系统,比如通过Auth::setUser($authenticatedUser)或自定义Guard完成绑定。
    2. 验证中间件在app/Http/Kernel.php中已正确注册路由别名,示例:
      protected $routeMiddleware = [
          // ...其他中间件
          'simple_auth' => \App\Http\Middleware\SimpleAuth::class,
      ];
      
  • 检查广播频道授权逻辑
    在routes/channels.php中,确认私有/ presence频道的授权回调能正确获取到认证用户:

    Broadcast::channel('private-your-channel', function ($user) {
        // 此处$user必须是simple_auth中间件认证后的用户实例
        // 返回true表示授权通过,false则直接返回403
        return !is_null($user);
    });
    

    如果回调中$user为null,说明中间件未正确传递用户,会直接触发403。

  • 调整前端Echo配置
    由于未使用Sanctum,无需CSRF Token相关配置,修改Echo配置如下:

    window.Echo = new Echo({
        broadcaster: 'reverb',
        key: 'sdfsdfsdfkjmvedvs',
        authorizer: channel => {
            return {
                authorize: (socketId, callback) => {
                    let formData = new FormData();
                    formData.append('socket_id', socketId);
                    formData.append('channel_name', channel.name);
                    axios
                        .post('http://api.abc.test/broadcasting/auth', formData, {
                            headers: {
                                "Authorization": 'Bearer 你的有效Token',
                                'X-Requested-With': 'XMLHttpRequest',
                            },
                            // 移除不需要的配置项
                            // withCredentials: true,
                            // withXSRFToken: true,
                        })
                        .then(response => callback(false, response.data))
                        .catch(error => callback(true, error))
                },
            }
        },
        wsHost: 'api.abc.test',
        wsPort: 8080,
        wssPort: 8080,
        forceTLS: false, // 你的环境为http,设为false
        enabledTransports: ['ws', 'wss'],
    });
    
  • 验证请求参数与CORS配置

    1. 打开浏览器开发者工具的Network面板,确认broadcasting/auth请求的Form Data中socket_id和channel_name是否正确传递。
    2. 检查config/cors.php配置,确保允许前端域名的POST请求:
      return [
          'paths' => ['api/*', 'broadcasting/auth'],
          'allowed_methods' => ['*'],
          'allowed_origins' => ['http://abc.test'], // 你的前端域名
          'allowed_origins_patterns' => [],
          'allowed_headers' => ['*'],
          'exposed_headers' => [],
          'max_age' => 0,
          'supports_credentials' => false, // 无需Cookie时设为false
      ];
      
  • 添加调试日志定位问题
    在simple_auth中间件和广播频道回调中添加日志,确认用户认证状态与请求参数:

    // 中间件内添加日志
    Log::info('Simple Auth User', ['user' => Auth::user()]);
    
    // channels.php回调内添加日志
    Broadcast::channel('private-your-channel', function ($user, $channelName) {
        Log::info('Channel Auth Check', ['user' => $user, 'channel' => $channelName]);
        return !is_null($user);
    });
    

    查看storage/logs/laravel.log即可确认用户是否被正确认证。

内容的提问来源于stack exchange,提问作者Selvakumar Eswaran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:41:15