laravel在管理员中广播

时间:2018-06-23 09:43:58

标签: php laravel socket.io broadcast

在我的laravel网站中,我们有两个警卫admincustomer,该警卫的表是-> customer tableadmin table

我想通过customer将通知从admin发送到laravel broadcasting 这是我在.strongs

管理员保护区中的.js文件中的代码

server.js文件:

window.Echo = new Echo({

   broadcaster: 'socket.io',
   host: window.location.hostname + ':6001',
}); 

* i have a admin by id=2 *

Echo.private('App.Models.Admin.2')
    .notification((notification) => {
        console.log(notification.type);
    });

并进入客户保护

\Notification::send(Admin::find(2) , new SimpleAlert('hey bro'));

SimpleAlert.php:

public function toBroadcast($notifiable)
{
    return new BroadcastMessage([
        'message' => $this->message,
        'type' => 'broadcast'
    ]);
}

因此,我启动了laravel-echo-server并打开了两个Google Chrome浏览器标签,一个用于admin guard,另一个用于customer guard,并登录了这两个守护程序。
控制台没有错误。 customer sending notification没有错误,但是`admin没有收到通知。

问题:
laravel-echo-server在我进入admin guard

时显示此信息
  

客户端无法通过身份验证,HTTP状态为403

请帮助我。

2 个答案:

答案 0 :(得分:1)

您可以做的是在routes/channels.php中添加授权。试试这个

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

答案 1 :(得分:0)

此答案对我不起作用。它不起作用的原因是因为您正在将预期的ID($ userId)与用户表(而非admin表)上的经过身份验证的用户进行比较。要通过私人渠道向管理员发送消息,这对我有用:

在routes / channels.php中。

Broadcast::channel('App.Models.Admin.{userId}', function ($user, $userId) {
    return auth()->guard('admin')->user()->id === $userId;
});