前端未接收到Laravel Reverb的 WebSocket事件(403广播/认证错误)
我正在开发一个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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。