推进器不';t在私人频道上广播-PHP/Laravel

推进器不';t在私人频道上广播-PHP/Laravel,php,laravel,pusher,Php,Laravel,Pusher,我已经为我的应用程序设置了Pusher和Laravel Echo,以便在某些事件触发时通知用户 我已经通过在“公共频道”上广播测试了设置是否正常工作,并成功地看到了它的工作原理 以下是活动本身: class ItemUpdated implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public $item; public function __constru

我已经为我的应用程序设置了Pusher和Laravel Echo,以便在某些事件触发时通知用户

我已经通过在“公共频道”上广播测试了设置是否正常工作,并成功地看到了它的工作原理

以下是活动本身:

class ItemUpdated implements ShouldBroadcast
{
  use Dispatchable, InteractsWithSockets, SerializesModels;

  public $item;

  public function __construct(Item $item)
  {
      $this->item = $item;
  }

  public function broadcastOn()
  {
      return new Channel('items');
  }
}
公共频道:

Broadcast::channel('items', function ($user, $item) {
  return true;
});
app/resources/assets/js/bootstrap.js:

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

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'my_key',
    cluster: 'eu',
    encrypted: true
});
和Laravel Echo注册:(事件触发视图从主布局的“头部”部分扩展而来。)

我已经检查了来自开发者控制台的传出网络请求,发现pusher正试图“发布”到

但它得到了500个错误代码

我想这可能有助于解决问题


我该怎么办呢?

所以我想出了如何实现专用频道监听并使其正常工作

我的错误是通配符选择

我告诉它使用经过身份验证的用户id作为通配符,而不是应用更改的项id

所以,这个通道下的注册总是返回false,并导致Pusher抛出500个找不到的auth

  Broadcast::channel('items.{item}', function ($user, \App\Item $item) {
    return $user->id === $item->user_id;
});
以下是工作版本: 正在广播的事件:

//ItemUpdated event

class ItemUpdated implements ShouldBroadcast
{
   use Dispatchable, InteractsWithSockets, SerializesModels;

   public $item;

   public function __construct(Item $item)
   {
       $this->item = $item;
   }

   public function broadcastOn()
   {
       return new PrivateChannel('items.'.$this->item->id);
   }
}
<head>

<meta name="csrf-token" content="{{ csrf_token() }}">


<script>
    window.Laravel = {'csrfToken': '{{csrf_token()}}'}

    window.Echo.private(`items.{{{$item->id}}}`)
    .listen('ItemUpdated', function(e) {
        console.log("It is working!");
    });

</script>
频道注册:

app\routes\channels.php    

Broadcast::channel('items.{item}', function ($user, \App\Item $item) {
    return $user->id === $item->user_id;
});
Laravel回波注册:

//ItemUpdated event

class ItemUpdated implements ShouldBroadcast
{
   use Dispatchable, InteractsWithSockets, SerializesModels;

   public $item;

   public function __construct(Item $item)
   {
       $this->item = $item;
   }

   public function broadcastOn()
   {
       return new PrivateChannel('items.'.$this->item->id);
   }
}
<head>

<meta name="csrf-token" content="{{ csrf_token() }}">


<script>
    window.Laravel = {'csrfToken': '{{csrf_token()}}'}

    window.Echo.private(`items.{{{$item->id}}}`)
    .listen('ItemUpdated', function(e) {
        console.log("It is working!");
    });

</script>

window.Laravel={'csrfToken':{{{{csrf_token()}}}}
window.Echo.private(`items.{{{{$item->id}}`)
.listen('ItemUpdate',函数(e){
log(“它正在工作!”);
});


谢谢大家的指点。

这是一个
500
错误。检查您的日志。是的,但是由于我的服务器在公共广播中正常工作,我不知道上面提到的问题是什么。检查你的日志。他们怎么说?日志infoPusher:无法从您的Web应用程序中获取身份验证信息:500服务器的错误日志或pusher的错误日志就是这么说的?
app\routes\channels.php    

Broadcast::channel('items.{item}', function ($user, \App\Item $item) {
    return $user->id === $item->user_id;
});
<head>

<meta name="csrf-token" content="{{ csrf_token() }}">


<script>
    window.Laravel = {'csrfToken': '{{csrf_token()}}'}

    window.Echo.private(`items.{{{$item->id}}}`)
    .listen('ItemUpdated', function(e) {
        console.log("It is working!");
    });

</script>