在我的laravel网站中,我们有两个警卫admin
和customer
,该警卫的表是-> customer table
和admin table
。
我想通过customer
将通知从admin
发送到laravel broadcasting
这是我在.strongs
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
请帮助我。
答案 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;
});