使用私人频道时,我无法让回声和推送器工作,谷歌搜索了两天并找到了 nada。
似乎发生的事情是身份验证存在某种问题(我使用的是 Laravel 基本身份验证),因为我可以订阅公共频道
路由/channels.php
Broadcast::channel('private-ci-received-{userId}', function ($user, $userId) {
return (int) $user->id === (int) $userId;
});
Broadcast::channel('private-ci-received-{toUserId}', function ($currentUser, $toUserId) {
return true;
});
引导程序.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,
logToConsole: true,
encrypted: true,
});
default.blade.php(主布局)
Pusher.logToConsole = true;
Echo.logToConsole = true;
Echo.private('ci-received-{{ Auth::user()->id}}')
.listen('.CIReceived', (e) => {
console.log(e);
});
在控制台上打印的是:
Pusher : No callbacks on private-ci-received-1 for pusher:subscription_error
这是一个非常普遍的错误,然后出于调试目的,我尝试使用 Pusher 绑定错误(不是 laravel echo)
var pusher = new Pusher('MYSECRETAPPKEYHERE', {
cluster: 'us2',
forceTLS: true
});
var channel = pusher.subscribe('private-ci-received-1');
channel.bind('pusher:subscription_error', function(data) {
console.log(data);
});
console.log(data) 输出
JSON returned from webapp was invalid, yet status code was 200
默认的 authEndPoint 是 /broadcasting/auth IIRC 我认为它希望返回 JSON,但它会从我的页面返回 HTML 代码。
这些路由是由框架本身创建的,从我读到的 Laravel echo 和 Laravel Auth 应该可以很好地协同工作,而不需要太多的摆弄。
我的 .env 文件是正确的,我正在使用 pusher 作为广播驱动程序,并且 BroadcastServiceProvider 已正确取消注释。
任何人都可以阐明这件事吗?谢谢