前端未接收到Laravel Reverb的 WebSocket事件(403广播/认证错误)

前端开发 2026-07-09

我正在开发一个Laravel项目,使用Laravel Reverb,通过WebSocket实现实时更新。

问题在于事件在后端成功触发,但在前端没有接收,且没有产生任何实时更新。


预期行为:
当事件被广播时,客户端应通过WebSocket立即收到。

实际行为:
没有接收到任何事件,浏览器控制台出现如下错误:

POST /broadcasting/auth → 403 (Forbidden)


1.环境配置 (.env)

以下是我的广播与Reverb配置:

BROADCAST_CONNECTION=reverb

REVERB_APP_ID=123456
REVERB_APP_KEY=wareed-key
REVERB_APP_SECRET=wareed-secret
REVERB_HOST=localhost
REVERB_PORT=8001
REVERB_SCHEME=http

VITE_REVERB_APP_KEY="${REVERB_APP_KEY}"
VITE_REVERB_HOST="${REVERB_HOST}"
VITE_REVERB_PORT="${REVERB_PORT}"
VITE_REVERB_SCHEME="${REVERB_SCHEME}"

2.前端订阅(Laravel Echo)

在前端,我订阅了一个基于已认证用户ID的私有频道:

window.Echo.private('donor.{{ auth()->user()->id }}')
    .listen('.blood-request.created', function (data) {
        console.log(data);
    });

3.广播事件

这是负责广播的事件类:

class BloodRequestCreated implements ShouldBroadcast
{
    public function __construct(
        public BloodRequest $bloodRequest,
        public User $donor
    ) {}

    public function broadcastOn(): array
    {
        return [
            new PrivateChannel('donor.' . $this->donor->id),
        ];
    }

    public function broadcastAs(): string
    {
        return 'blood-request.created';
    }
}

4.广播认证路由

我手动定义了广播认证路由:

Route::post('/broadcasting/auth', function (Request $request) {
    return Broadcast::auth($request);
})->middleware(['web', 'auth:web,hospital'])->name('broadcasting.auth');

5.错误细节

浏览器控制台:

POST http://localhost:8000/broadcasting/auth 403 (Forbidden)

6.我已经尝试过的

  • 使用以下命令运行Reverb服务器:
    php artisan reverb
  • 验证广播配置
  • 确认事件已触发
  • 调试前端的监听器

问题

在使用Laravel Reverb对私有频道进行认证时,可能导致403 Forbidden错误的原因是什么?以及为什么前端没有收到事件?


附加说明:
我怀疑问题可能与身份验证或广播配置有关,但不确定具体问题出在哪里。

解决方案

请确保channels.php中包含以下内容:

Broadcast::channel('donor.{id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章