Jos*_*ned 9 php socket.io laravel laravel-echo
我正在使用 laravel-echo-server 运行 Laravel Echo 来广播事件。
我有一个用户计数器频道,显示应用程序上的所有用户。为此,我使用了在线状态频道。这适用于登录用户,但客人永远无法连接。
我在 BroadcastServiceProvider 中设置了以下内容:
Broadcast::channel('global', function () {
return ['name' => 'guest'];
});
据我所知,应该允许每个人作为“客人”进入。我猜在此之前正在检查一些中间件或身份验证,我需要为此通道禁用。
非常感谢让所有客户加入此在线渠道的任何帮助!
其他解决方案对于我的访客存在频道不起作用,这就是我最终得到的结果:
// routes/channels.php
<?php
use Illuminate\Auth\GenericUser;
/*
|--------------------------------------------------------------------------
| Broadcast Channels
|--------------------------------------------------------------------------
|
| Here you may register all of the event broadcasting channels that your
| application supports. The given channel authorization callbacks are
| used to check if an authenticated user can listen to the channel.
|
*/
Route::post('/custom/broadcast/auth/route', function () {
$user = new GenericUser(['id' => microtime()]);
request()->setUserResolver(function () use ($user) {
return $user;
});
return Broadcast::auth(request());
});
Broadcast::channel('online.{uuid}', function ($user, $uuid) {
return [
'id' => $user->id,
'uuid' => $uuid
];
});
Run Code Online (Sandbox Code Playgroud)
对于任何寻找此问题答案的人。确实可以将访客授权进入存在频道,您只需用自己的服务覆盖服务提供商的 Broadcast::routes() 即可。
例如,我的状态频道“全球”接受客人:
Route::post('/broadcasting/auth', function(Illuminate\Http\Request $req) {
if($req->channel_name == 'presence-global'){return 'global';}
return abort(403);
});
这可以向各个方向扩展,或者可以继续将其他存在和私有通道传递到默认的 Broadcast::auth 方法
| 归档时间: |
|
| 查看次数: |
6179 次 |
| 最近记录: |