Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.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 Laravel广播,如何认证状态频道?_Php_Laravel_Websocket_Laravel Echo - Fatal编程技术网

Php Laravel广播,如何认证状态频道?

Php Laravel广播,如何认证状态频道?,php,laravel,websocket,laravel-echo,Php,Laravel,Websocket,Laravel Echo,我正在尝试加入一个状态频道(公共频道工作得很好),但我无法让它工作: Vue代码: mounted(){ Echo.join('game.' + "0").here((users) => { alert("In the channel!"); }) .joining((user) => { console.log(&q

我正在尝试加入一个状态频道(公共频道工作得很好),但我无法让它工作:

Vue代码:

mounted(){
        Echo.join('game.' + "0").here((users) => {
                alert("In the channel!");
            })
            .joining((user) => {
                console.log("Someone entered");
            })
            .leaving((user) => {
                console.log(user.name);
            })
            .listen('GameEvent', (e) => {
                console.log("Hey")
            });

            Echo.channel('NewSentence')
                .listen('NewSentence',(sentence)=>{
                    alert("HOLA");
                });
    }
我正在尝试加入“game.0”频道。当我使用Laravel Passport时,我需要使用令牌对自己进行身份验证,这是有效的。发送Laravel Echo的身份验证请求会返回一个键,但JavaScript事件不会触发
.here()
.listening()

广播服务提供商启动功能:

public function boot() {
        Broadcast::routes(["middleware" => "auth:api"]);
        require base_path('routes/channels.php');
    }
Route::post('/broadcasting/auth', function(Request $request){
$pusher = new Pusher\Pusher(
    env('PUSHER_APP_KEY'),
    env('PUSHER_APP_SECRET'),
    env('PUSHER_APP_ID'),
    array(
        'cluster' => env('PUSHER_APP_CLUSTER'),
        'useTLS' => false,
        'host' => '127.0.0.1',
        'port' => 6001,
        'scheme' => 'http',
    )
);

return $pusher->socket_auth($request->request->get('channel_name'),$request->request->get('socket_id'));
});
channels.php

Broadcast::channel('game.0', function ($user,$id) {
   return ['id' => $user->id];


});
验证路径:

public function boot() {
        Broadcast::routes(["middleware" => "auth:api"]);
        require base_path('routes/channels.php');
    }
Route::post('/broadcasting/auth', function(Request $request){
$pusher = new Pusher\Pusher(
    env('PUSHER_APP_KEY'),
    env('PUSHER_APP_SECRET'),
    env('PUSHER_APP_ID'),
    array(
        'cluster' => env('PUSHER_APP_CLUSTER'),
        'useTLS' => false,
        'host' => '127.0.0.1',
        'port' => 6001,
        'scheme' => 'http',
    )
);

return $pusher->socket_auth($request->request->get('channel_name'),$request->request->get('socket_id'));
});
我需要做些额外的事情来让它工作吗?这是身份验证请求:

编辑: 游戏事件事件:

class GameEvent implements ShouldBroadcastNow {
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $gameEvent;
    public $gameId;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($gameEvent, $gameId) {
        //
        $this->gameEvent = $gameEvent;
        $this->gameId = $gameId;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\PresenceChannel|array
     */
    public function broadcastOn() {
        //return new PrivateChannel('channel-name');
        return new PresenceChannel('game.0');
    }

    public function broadcastWith() {
        return $this->gameEvent;
    }

}
编辑:

我已经对名称进行了硬编码:“game.0”现在在
routes/channels.php
route、Echo连接和GameEvent中进行了硬编码。我还删除了
broadcastAs()
。进入laravel websockets调试仪表板后,我发现我想要订阅的频道甚至没有出现。看起来它不会启动连接,但我不知道发生了什么


我硬编码了

这里的问题似乎是回声没有在正确的频道上收听。首先,Echo.join使用的是channel game.0,其中0是用户id,我认为实际上没有id为0的用户。第二,你是作为

游戏事件

Echo正在连接名为game的频道。{id}我建议您从事件文件中删除broadcastAs()函数,或者收听GameEvent。也可以使用websocket仪表板进行测试。仪表板将在以下位置提供:

/拉维尔网袋

自动路由,这仅适用于本地环境,因此请确保环境在.env中是本地的

使用laravel websockets提供的调试仪表板向频道发送数据,首先连接仪表板中的web套接字,然后只需输入JSON格式的频道名称、事件名称和数据,然后点击仪表板上的发送。 试着找出这是否有助于解决您的问题

我还建议你彻底阅读,同时也要认真阅读。
另外,请更新此问题的结果。

这里的问题似乎是回音未在正确的频道上收听。首先,Echo.join使用的是channel game.0,其中0是用户id,我认为实际上没有id为0的用户。第二,你是作为

游戏事件

Echo正在连接名为game的频道。{id}我建议您从事件文件中删除broadcastAs()函数,或者收听GameEvent。也可以使用websocket仪表板进行测试。仪表板将在以下位置提供:

/拉维尔网袋

自动路由,这仅适用于本地环境,因此请确保环境在.env中是本地的

使用laravel websockets提供的调试仪表板向频道发送数据,首先连接仪表板中的web套接字,然后只需输入JSON格式的频道名称、事件名称和数据,然后点击仪表板上的发送。 试着找出这是否有助于解决您的问题

我还建议你彻底阅读,同时也要认真阅读。
同时更新您在这个问题的结果。

您也可以上传您正在广播的事件文件吗?@Kuldeep post updated!你还可以上传你正在广播的事件文件吗?@Kuldeep post更新!在回答这个问题之后,我对名称进行了硬编码:“game.0”现在在
routes/channels.php
route、Echo连接和GameEvent中进行了硬编码。正如你所说,我还删除了
broadcastAs()
。进入laravel websockets仪表板后,我发现我想要订阅的频道甚至没有出现。看起来它不会启动连接,但我不知道在你用更新的文件更新问题时会发生什么。。。我想你可以用仪表板解决这个问题。。。此外,有时名称空间也会出现问题。。。广播事件时请查看仪表板日志…我用这些更改更新了帖子。仪表板没有给出任何线索,通过通道发送的消息正确,并且控制台中没有显示任何错误。它只是不连接到状态通道。你说的仪表板不提供任何线索是什么意思?你能在仪表板上看到你的echo订阅了game.0频道吗?如果您可以尝试从仪表板发送事件,请检查它是否有效。。。我可以用同一个仪表板解决我的问题。不,就是这样,我看不到我的echo订阅了游戏。0频道。没有订阅该频道。在回答这个问题之后,我已经对名称进行了硬编码:“game.0”现在在
routes/channels.php
route、Echo连接和GameEvent中进行了硬编码。正如你所说,我还删除了
broadcastAs()
。进入laravel websockets仪表板后,我发现我想要订阅的频道甚至没有出现。看起来它不会启动连接,但我不知道在你用更新的文件更新问题时会发生什么。。。我想你可以用仪表板解决这个问题。。。此外,有时名称空间也会出现问题。。。广播事件时请查看仪表板日志…我用这些更改更新了帖子。仪表板没有给出任何线索,通过通道发送的消息正确,并且控制台中没有显示任何错误。它只是不连接到状态通道。你说的仪表板不提供任何线索是什么意思?你能在仪表板上看到你的echo订阅了game.0频道吗?如果您可以尝试从仪表板发送事件,请检查它是否有效。。。我能用同一个仪表板解决我的问题。不,是的