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

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

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

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

一些和我类似的问题:

规格:

  • 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://stackoverflow.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() 功能是什么?
  • 嗨,公共频道和私人频道工作正常,问题是:我很想订阅出席频道,但它不像任何教程/文档那样工作,我没有发送任何数据,只是想订阅出席频道

标签: laravel pusher laravel-echo pusher-js


【解决方案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(如果访问被拒绝)
猜你喜欢
  • 2016-08-26
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 2017-05-12
  • 2016-03-06
  • 1970-01-01
  • 2020-06-10
相关资源
最近更新 更多