Laravel Echo 没有订阅 Pusher Presence Channel,甚至在 Pusher 仪表板中也没有

Posted

技术标签:

【中文标题】Laravel Echo 没有订阅 Pusher Presence Channel,甚至在 Pusher 仪表板中也没有【英文标题】:Laravel Echo not subscribing to Pusher Presence Channel, not even in Pusher dashboard 【发布时间】:2021-06-07 08:05:13 【问题描述】:

我花了很多时间来解决我的这个问题,多次阅读文档,到处搜索:SO、Laracast、Larachat 等,但仍然无法让 Laravel Echo 订阅 Pusher 在线频道,并且控制台标签中没有显示任何错误

公共私人频道运行良好流畅,用户可以订阅,用户可以收听/触发事件

注意:在创建这篇文章之前,我有一些与我当前的问题相关的搜索问题,他们都没有答案

一些和我类似的问题:

https://laravelquestions.com/2020/12/15/laravel-echo-not-joining-presence-channel-in-production/ Laravel Echo + Laravel Passport auth in private / presence websockets channels https://laravel.io/forum/facing-issues-upon-subscribing-to-presence-channel 等等..

规格:

Laravel:7.30.1 laravel-Echo:1.10.0(最新;atm) 推送器/推送器-php-服务器:4.0 pusher-js:7.0.3(最新;atm)

resource/js/bootstrap.js

import Echo from 'laravel-echo'

window.Pusher = require('pusher-js');

window.Echo = new Echo(
    broadcaster: 'pusher',
    key: process.env.MIX_PUSHER_APP_KEY,
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    forceTLS: true,
    authEndpoint: '/api/broadcasting/auth',
    auth: 
        headers: 
            'Authorization': `Bearer $localStorage['token']`
        
        
);

routes/api.php

// https://***.com/questions/55555844/authorizing-broadcasting-channel-in-an-spa
Route::post('/broadcasting/auth', function (Request $request) 
    $pusher = new Pusher\Pusher(
        env('PUSHER_APP_KEY'),
        env('PUSHER_APP_SECRET'),
        env('PUSHER_APP_ID'),
        [
            'cluster' => env('PUSHER_APP_CLUSTER')
        ]
    );

    // This will return JSON response: auth:"__KEY__", see comment below
    // https://pusher.com/docs/channels/server_api/authenticating-users
    $response = $pusher->socket_auth($request->request->get('channel_name'), $request->request->get('socket_id'));

    return $response;
)->middleware('auth:sanctum');

routes/channels.php

// https://laravel.com/docs/8.x/broadcasting#authorizing-presence-channels
Broadcast::channel('whatever', function ($user) 
    return [
        'id' => $user->id,
        'name' => $user->name
    ];
);

home.vue

...
...
created() 
    Echo.join('whatever') // DOES NOT WORK, Even in mounted() vue lifehook, and in Pusher dashboard, it doesn't show this channel name
        .here((users) => 
            console.table(users)
        )

问:为什么 Laravel Echo 不订阅 Pusher 在线频道?即使在 Pusher 中,它也没有显示频道名称:presence-whatever,只有 disconnected(我刷新页面后),然后是 connected,就像 什么都没有发生

提前致谢

【问题讨论】:

您的活动broadcastOn() 功能是什么? 嗨,公共频道和私人频道工作正常,问题是:我很想订阅出席频道,但它不像任何教程/文档那样工作,我没有发送任何数据,只是想订阅出席频道 【参考方案1】:

确保将广播驱动程序设置为 env 之后执行php artisan config:clear

使用window.Echo.channel('whatever')加入频道。

【讨论】:

公共和私人频道都工作正常,问题是,用户没有订阅在线频道 嗨@musti,我正在尝试订阅presence channel,但通常不发送任何数据,routes/channel.php 中没有任何通道路由,我们可以订阅一个频道/多个频道,只要我们的代码中有如下语法:Echo.channel('public')Echo.private('private'),并且我们可以在 Pusher 仪表板中看到我们正在订阅频道,我已经对其进行了测试,并且它是为我工作,就以下而言:publicprivate 频道【参考方案2】:

1.确保将广播驱动程序设置为 .env 之后执行 php artisan config:clear BROADCAST_DRIVER=pusher

2。 Ferify 你的 auth.php。我喜欢这个

3.检查你的broadcasting.php这是我的开发配置

4.检查 CORS 设置 我安装了fruitcake/laravel-cors,这是我的cors.php 配置

也许你supports_credentials需要true

5.检查您的channels.php。我有

【讨论】:

你好,maxim,谢谢你的回答,但很遗憾,我的电脑ATM坏了,需要修理,至少2周,但别担心,我的电脑修好后,我将重新打开赏金并测试您的答案,如果有效,我将检查您的答案是否正确,再次抱歉,请等待我的电脑修复 你好 maxim,我刚刚在我朋友的电脑上测试了你的答案,但它不起作用 @ChristianDelvianto 有什么错误?同样在 channels.php 中,您可能需要返回用户数据或 false(如果访问被拒绝)

以上是关于Laravel Echo 没有订阅 Pusher Presence Channel,甚至在 Pusher 仪表板中也没有的主要内容,如果未能解决你的问题,请参考以下文章

无法广播客户端事件(连接未订阅频道私聊)

Laravel Echo 在 Laravel 8-vue js "^2.5.17" 版本中没有收到 Pusher 事件

订阅私人频道时的 Pusher/Laravel 回显错误:订阅频道的身份验证值无效:格式应为“密钥:签名”

不使用 npm 将 laravel-echo 和 pusher-js 安装为一个简单的 js 文件

419 auth 错误尝试使用 Laravel Echo、Vue 和 Pusher 设置事件

Laravel Echo 监听器没有在听