问题描述
我花了很多时间来解决我的这个问题,多次阅读文档,到处谷歌搜索: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
(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。我有这样的
3.检查您的 broadcasting.php
这是我的开发配置
4.检查 CORS 设置我安装了 fruitcake/laravel-cors
,这是我的 cors.php
配置
也许对你来说supports_credentials
需要true
5.检查您的 channels.php
。我有