微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel Echo 连接但未订阅生产服务器上的 Pusher Private Channel

如何解决Laravel Echo 连接但未订阅生产服务器上的 Pusher Private Channel

我有一个 Laravel API 后端,使用 Sanctum 进行身份验证。我使用 VueJS 作为前端和 Laravel Echo 来监听私人频道上的广播事件。在我的本地开发机器上,我可以毫无问题地连接和订阅私人频道。我可以在 Pusher 调试控制台中看到这一点。

但是,在我的生产服务器上,我可以看到在调试控制台中与 Pusher 建立了连接,但未进行订阅。我不知道这是为什么...这是我的配置文件如下:

config/broadcasting.PHP

'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 举报,一经查实,本站将立刻删除。