我正在尝试授权一个私有通道。
我使用Vue.js作为SPA, Laravel Sanctum为auth, Laravel为api。
作为Laravel的文档,我在"channels.php"上编写了我的通道回调。在"routes"文件夹中。但这行不通。当我试图验证通道时显示403。然后我将我的通道回调代码移动到"api.php";你能给我解释一下吗?我想把我的channel回调写在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 echo代码。
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了。