【发布时间】:2018-01-17 15:52:09
【问题描述】:
我正在尝试使用 Laravel 5.4(后端)和 Angular 2(前端)将聊天集成到 web 应用程序中。我有一个独特的广播频道,可以向用户发送消息。每个用户都有自己的频道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');
}
连接到前端的广泛频道(正在接收消息)
组件.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);
});
【问题讨论】:
-
你找到解决办法了吗?
-
请发布您找到的解决方案
-
我一直无法让它工作。我用一个信号代替
-
这个问题你解决了吗?
标签: laravel laravel-5 laravel-5.4