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 仪表板中看到我们正在订阅频道,我已经对其进行了测试,并且它是为我工作,就以下而言:public
和 private
频道【参考方案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 文件