【问题标题】:Why Laravel Authorizing Private Broadcast Channels is not working? "channels.php" not working为什么 Laravel 授权私人广播频道不起作用? “channels.php”不工作
【发布时间】:2021-11-08 01:00:12
【问题描述】:

我正在尝试授权私人频道。
我将 Vue.js 用作 SPA,将 Laravel Sanctum 用作 auth,将 Laravel 用作 api。
作为 Laravel 的文档,我在“routes”文件夹下的“channels.php”上编写了我的频道回调。但它没有用。当我尝试对频道进行身份验证时,它说的是 403。然后我将我的频道回调代码移动到“api.php”并且它正在工作。
你能解释一下为什么吗?我想在“channel.php”上写我的频道回调。我正在使用 Laravel 8。这是我的简单代码。

这是在我的 MessageSent 事件中。

public function broadcastOn()
{
    return new PrivateChannel("message");
}

public function broadcastAs()
{
    return "message-sent";
}

这些是我移到 api.php 的代码,因为它们在 channels.php 中不起作用。

Broadcast::channel('message', function ($user) {
    return true;
});

这是在 BroadcastServiceProvider 里面。据我所知,“channels.php”包含在 boot() 函数中,其中的代码应该可以工作。

public function boot()
{
    Broadcast::routes();

    require base_path('routes/channels.php');
}

这是我的 Laravel 回显代码。

window.Echo = new Echo({
  broadcaster: "pusher",
  cluster: "ap1",
  encrypted: true,
  key: "my_key",
  authorizer: (channel) => {
    return {
      authorize: (socketId, callback) => {
        api.post('broadcasting/auth', {
            socket_id: socketId,
            channel_name: channel.name
        })
        .then(response => {
            callback(false, response.data);
        })
        .catch(error => {
            callback(true, error);
        });
      }
    };
  }
});

window.Echo.private("message").on("message-sent", (data) => {
  console.log(data);
})

【问题讨论】:

  • 非常干净的问题,谢谢!

标签: laravel laravel-echo laravel-sanctum laravel-broadcast


【解决方案1】:

我现在知道答案了。默认情况下,似乎 BroadcastServiceProvider 在 config/app.php 中被注释。因此,BroadcastServiceProvider 不工作,因此,channels.php 不工作。我删除了该评论,我现在可以使用 channels.php。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2021-11-15
  • 2021-07-15
  • 2020-07-23
  • 1970-01-01
  • 2021-06-01
  • 2020-03-24
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
相关资源
最近更新 更多