Laravel Echo - 允许访客连接到状态通道

Jos*_*ned 9 php socket.io laravel laravel-echo

我正在使用 laravel-echo-server 运行 Laravel Echo 来广播事件。

我有一个用户计数器频道,显示应用程序上的所有用户。为此,我使用了在线状态频道。这适用于登录用户,但客人永远无法连接。

我在 BroadcastServiceProvider 中设置了以下内容:

Broadcast::channel('global', function () { return ['name' => 'guest']; });

据我所知,应该允许每个人作为“客人”进入。我猜在此之前正在检查一些中间件或身份验证,我需要为此通道禁用。

非常感谢让所有客户加入此在线渠道的任何帮助!

jbw*_*ite 7

其他解决方案对于我的访客存在频道不起作用,这就是我最终得到的结果:

// 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)


Jos*_*ned 2

对于任何寻找此问题答案的人。确实可以将访客授权进入存在频道,您只需用自己的服务覆盖服务提供商的 Broadcast::routes() 即可。

例如,我的状态频道“全球”接受客人:

Route::post('/broadcasting/auth', function(Illuminate\Http\Request $req) { if($req->channel_name == 'presence-global'){return 'global';} return abort(403); });

这可以向各个方向扩展,或者可以继续将其他存在和私有通道传递到默认的 Broadcast::auth 方法

  • 然后,如何加入房间? (2认同)