我正在尝试使用Laravel 5.4 (后端)和Angular 2(前端)将聊天集成到一个and应用程序中。我有一个向用户发送消息的唯一广播频道。每个用户都有自己的频道,这个频道是chat-{uuid},其中uuid是聊天表中的一个惟一ID,该表还存储了可以访问该频道的用户的userID。问题是永远不会调用授权回调,因此任何知道uuid的用户都可以访问该通道。我不确定我做错了什么
channels.php
// This authorization is never called
Broadcast::channel('chat-{uuid}', function ($user, $uuid) {
return false;
});NewMessage.php事件
protected $message;
public function __construct($message)
{
$this->message = $message;
}
protected function prepareData()
{
return [
'chatID' => $this->message->chatID,
'userID' => $this->message->builderID,
'message' => $this->message->message,
];
}
public function broadcastWith()
{
return [
'message' => $this->prepareData(),
];
}
public function broadcastAs()
{
return 'new.message';
}
public function broadcastOn()
{
return new PrivateChannel('chat-'.$this->message->chatID);
}BroadcastServiceProvider.php
public function boot()
{
Broadcast::routes( [ 'middleware' => [ 'api', 'auth.jwt' ] ] );
require base_path('routes/channels.php');
}连接到前端的宽频频道(正在接收消息)
Component.ts
window['Echo'] = new Echo({
broadcaster: 'socket.io',
host: 'http://app.test:6001',
auth:
{
headers:
{
'Authorization': 'Bearer ' + this.auth.jwt
}
}
});
window['Echo'].private(`chat-${this.chatUUID}`)
.listen(".new.message", (data) => {
this.messages.data.push(data.message);
});发布于 2019-07-30 19:33:35
显然,问题不在编程方面,而是与您的web服务器配置(或web套接字服务器)有关。我认为你总是得到私有通道的身份验证,但不是通过简单的/broadcusting/auth,因为响应会给你200个代码。正如您在laravel-echo-server sourse通道中看到的,剩余地获取身份验证。因此,您的routes/channels可能不会参与此过程。此外,如果您将BroadcastServiceProvider排除在配置之外,那么您可能会得到私有通道的身份验证。
如果一切都是这样,我建议看看web服务器的配置,特别是当你使用SSL、Alternative SSL implementation和laravel-echo-server.json的时候。
https://stackoverflow.com/questions/48305039
复制相似问题