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

问题描述

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

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

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

一些和我类似的问题:

规格:

  • Laravel:7.30.1
  • laravel-Echo: 1.10.0 (latest; atm)
  • pusher/pusher-PHP-server:4.0
  • pusher-js: 7.0.3 (latest; 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 就像 没有发生

提前致谢

解决方法

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

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

,

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

2.验证您的 auth.php。我有这样的

enter image description here

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

enter image description here

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

也许对你来说supports_credentials需要true

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

enter image description here