如何解决Laravel Echo 连接但未订阅生产服务器上的 Pusher Private Channel
我有一个 Laravel API 后端,使用 Sanctum 进行身份验证。我使用 VueJS 作为前端和 Laravel Echo 来监听私人频道上的广播事件。在我的本地开发机器上,我可以毫无问题地连接和订阅私人频道。我可以在 Pusher 调试控制台中看到这一点。
但是,在我的生产服务器上,我可以看到在调试控制台中与 Pusher 建立了连接,但未进行订阅。我不知道这是为什么...这是我的配置文件如下:
'connections' => [
'pusher' => [
'driver' => 'pusher','key' => env('PUSHER_APP_KEY'),'secret' => env('PUSHER_APP_SECRET'),'app_id' => env('PUSHER_APP_ID'),'options' => [
'cluster' => 'eu',// 'useTLS' => true
],
routes/channels.PHP - 我返回 true 以确保它不是导致它的身份验证
broadcast::channel('calendar.{id}',function ($user,$id) {
return true;
});
我取消了 App\Providers\broadcastServiceProvider::class,
中的 config/app.PHP
注释并添加了 broadcast::route 函数以使用 sanctum。
public function boot()
{
broadcast::routes(['middleware' => ['auth:sanctum']]);
require base_path('routes/channels.PHP');
}
我在 main.js 中的前端配置(baseURL 是我们 API 的 URL,例如:https://site.oursite.com:
window.Pusher = require("pusher-js");
window.Echo = new Echo({
broadcaster: "pusher",key: "my key",cluster: "eu",encrypted: true,authEndpoint: config.get("baseUrl") + "/broadcasting/auth",auth: {
headers: {
authorization: `Bearer ${token.getToken(1)}`,},});
axios.defaults.withCredentials = true;
axios.defaults.baseURL = config.get("baseUrl");
axios.get("/sanctum/csrf-cookie");
let socketId = false;
window.Echo.connector.pusher.connection.bind("connected",function() {
socketId = window.Echo.socketId();
});
//set the socket ID on each axios request
axios.interceptors.request.use((conf) => {
// pusher socket
if (socketId) conf.headers["X-Socket-ID"] = socketId;
// add auth token
conf.baseURL = config.get("baseUrl") + "/api/";
if (token.hasToken(1))
conf.headers.authorization = `Bearer ${token.getToken(1)}`;
return conf;
});
还有听众:
window.Echo.private(`calendar.${calendarId}`).listen(
".entry.created",(payload) => {
console.log(payload);
}
);
在生产与本地开发之间有什么需要特别设置的吗? 我认为在环境中唯一不同的是生产服务器使用 SSL,而在本地开发中我没有。 如果有人有任何我可以尝试的想法,我将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。