【问题标题】:Laravel 5.4 Pusher (laravel-echo) cannot access private channelLaravel 5.4 Pusher (laravel-echo) 无法访问私有频道
【发布时间】:2018-01-24 10:18:20
【问题描述】:

我一直在测试 Laravel Echo,它适用于非私人频道。我收到通过该非私人频道上的事件传递的数据。但问题是当我将事件设置为在私人频道上广播时,我收到如下错误消息: 注意:根据图片,我以用户身份登录。

当我订阅私人频道时,我在 Laravel 中转到 config/app.php 并取消注释“App\Providers\BroadcastServiceProvider::class,”。 还转到 App\Providers\BroadcastServiceProvider.php 并使用如下图所示的代码:

我的 Resources/assets/js/bootstrap.js 文件包含以下代码并使用 laravel mix 编译:

import Echo from 'laravel-echo'
window.Pusher = require('pusher-js');

window.Echo = new Echo({
  broadcaster: 'pusher',
  key: 'hiddenkey',
  cluster: 'ap1',
  encrypted: true
 });

window.Echo.private('chat-room.1')
      .listen('ChatMessageWasReceived', (e) => {
          console.log(e.user, e.chatMessage);
});

顺便说一句,我已经安装了所有依赖项,即: - 作曲家需要 pusher/pusher-php-server , - npm install --save laravel-echo pusher-js, 还使用对 .env 文件的引用配置了我的 config/broadcasting.php,该文件输入了推送器所需的所有信息。一切正常,正如您所看到的,我从事件中接收数据的非私人频道如下图所示:

这是我创建的事件:

我正在接收图片中的私人频道、事件和数据:

为什么即使我是已登录的经过身份验证的用户,并且在 BroadcastServiceProvider.php 文件中我对 Broadcast::channel() 方法返回 true,我也看不到从我的事件传递的数据?我从非私人频道接收数据,那为什么不在私人频道呢?我做错了什么?为什么我在控制台而不是数据中出现这些错误:

- POST http://example.dev/broadcasting/auth 500 (Internal Server Error)
- Pusher : Couldn't get auth info from your webapp : 500

顺便说一句,在我被私人频道卡住之前,我一直在关注本教程: https://mattstauffer.co/blog/introducing-laravel-echo

【问题讨论】:

    标签: laravel-5 pusher laravel-echo


    【解决方案1】:

    解决这个问题的方法是私有频道应该有一个通配符。在您的 Providers/BroadcastServiceProvider.php 中,定义您的私人频道的授权,您应该将私人频道的通配符放在“{}”中。在我的情况下应该如下:

        Broadcast::channel('chat-room.{chatroomId}', function ($user, 
        $chatroomId) {} );
    

    请注意,即使我在活动中将“chat-room.1”定义为我的私人频道的名称,我仍然必须按照上面的通配符代码使用“{}”而不是“1”,因为私人频道应该有通配符。您不能使用 * 作为通配符,这是问题所在。

    希望对大家有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 2019-06-04
      • 1970-01-01
      • 2020-04-14
      • 2020-01-15
      • 2020-02-13
      • 2020-07-28
      • 2020-11-22
      • 1970-01-01
      相关资源
      最近更新 更多