【问题标题】:Private channels data does not get received by clients客户未收到私人频道数据
【发布时间】:2019-03-07 07:40:41
【问题描述】:

我无法使用 Pusher 和 Laravel 广播让私人频道工作。在routes/channels.php 文件中,似乎没有任何函数被触发:

Broadcast::channel('App.User.{id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});


Broadcast::channel('testevent.{id}', function ($user, $id)
{
    //This never fires
    dd("ENTERED HERE");
    return TRUE;
});

BroadcastServiceProvider.php我有:

public function boot()
{
    Broadcast::routes(['middleware' => 'auth:api']);

    require base_path('routes/channels.php');
}

Javascript file 在客户端处理数据(使用 Echo):

Echo.private('testevent.1').listen('TestEvent', function(e)
{
    console.log(e);
});

使用公共渠道非常有效。但是,一旦我尝试创建私有通道,数据就不会发送到侦听数据的客户端。可能是什么问题?

感谢您的帮助和指导!

编辑:

在 Pusher Web 控制台中,客户端似乎没有订阅“testevent.1”频道。如果我将其更改为公共频道,订阅就会被注册。

【问题讨论】:

    标签: laravel laravel-5 pusher


    【解决方案1】:

    在 Laravel 广播文档的“Defining authorization callbacks”段落中,您可以看到私人频道需要对用户进行身份验证才能收听。

    所以在您的routes/channels.php 中,您需要在那里编写身份验证逻辑,例如:

    Broadcast::channel('testevent.{id}', function ($user, $id)
    {
        return $user->id === $user::findOrFail($id);
    });
    

    【讨论】:

    • 感谢您的回复。这就是我在问题的第一个代码 sn-p 中所做的。我为所有用户返回 true 只是为了测试它。但这不起作用。它甚至似乎都没有触发 Broadcast::channel 代码 sn-p。我试图输入“dd”以查看它是否进入。但没有运气。
    • 你也可以发布你的相关事件类吗?
    猜你喜欢
    • 2016-11-06
    • 1970-01-01
    • 2020-11-22
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2016-12-06
    • 2019-07-03
    相关资源
    最近更新 更多