Laravel 5.4 Pusher(laravel-echo)无法访问私人频道

时间:2017-08-16 10:09:19

标签: laravel-5 pusher laravel-echo

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

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

我的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,该文件已经输入了推送器所需的所有信息。一切正常,你可以看到一个非私人频道,我从事件中收到数据,如下图所示: enter image description here

这是我创建的事件: Event

我按照图片收到私人频道,活动和数据: enter image description here

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

- 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

1 个答案:

答案 0 :(得分:0)

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

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

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

希望它可以帮助任何人。