Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 管理守卫中的拉威尔广播_Php_Laravel_Socket.io_Broadcast - Fatal编程技术网

Php 管理守卫中的拉威尔广播

Php 管理守卫中的拉威尔广播,php,laravel,socket.io,broadcast,Php,Laravel,Socket.io,Broadcast,在我的laravel网站中,我们有两个guardadmin和customer这个guard的表是->customer表和admin表 我想通过laravel广播将客户的通知发送给管理员 这是我在.js文件中输入到管理员保护中的代码 server.js文件: window.Echo = new Echo({ broadcaster: 'socket.io', host: window.location.hostname + ':6001', }); * i have a admi

在我的laravel网站中,我们有两个guard
admin
customer
这个guard的表是->
customer表
admin表

我想通过
laravel广播
客户的通知发送给
管理员
这是我在.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'));
simplelert.php:

public function toBroadcast($notifiable)
{
    return new BroadcastMessage([
        'message' => $this->message,
        'type' => 'broadcast'
    ]);
}
因此,我启动laravel echo服务器并打开两个google chrome选项卡,一个用于
管理员保护
,另一个用于
客户保护
,并登录到这两个保护。
控制台中没有错误。
客户发送通知时没有错误,但“管理员”未收到通知

问题:
当我进入
管理员守卫时,laravel echo服务器会显示这一点

无法对客户端进行身份验证,已获取HTTP状态403


请帮帮我。

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

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

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

在routes/channels.php中

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

您需要在
频道中授权
App.Models.Admin.2