laravel - 为什么 Laravel 授权私人广播频道不起作用?“channels.php”不工作
问题描述
我正在尝试授权私人频道。
我使用 Vue.js 作为 SPA,使用 Laravel Sanctum 进行身份验证,使用 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);
})
解决方案
我现在知道答案了。默认情况下,似乎 BroadcastServiceProvider 在 config/app.php 中被注释。因此,BroadcastServiceProvider 不工作,因此,channels.php 不工作。我删除了该评论,我现在可以使用 channels.php。
推荐阅读
- postgresql - 如何使用触发器函数中的动态表名为所有触发器创建一个函数
- angular - 在复选框/单选按钮上禁用 Angular 11 表单
- ios - Firebase Crashlytics 调试模式不在 ios 中发送报告
- android - android设备的公共IP地址
- python - 收集垃圾的画布图像
- java - 如何在mac os中更改java版本
- php - PHP将图像上传到wordpress中的数据库
- php - Woocommerce 产品页面重定向中断添加到购物车按钮
- flutter - 颤振 PropertyChangeNotifier 忽略:mixin_inherits_from_not_object
- elasticsearch - 如何在 Elasticsearch 中仅获取嵌套字段中的特定对象以及搜索查询