在 laravel 中将中间件添加到推送器通道
Add middleware to pusher channel in laravel
所以我在 laravel 中使用推送器实现了一点聊天功能,因此它可以实时更新。每当发送消息时,我都会使用以下方法调用 broadcast(new MessageSent($message, $conversationId));
的事件。
public function broadcastOn()
{
return ['chat-' . $this->conversationId];
}
public function broadcastAs()
{
return 'new-message';
}
还有一段 js 将它推送到我的前端,这样调用
var channel = pusher.subscribe('chat-' + {{ $conversation->id }});
channel.bind('new-message', function(data) {
console.log(JSON.stringify(data));
pushForeignMessage(data.message);
});
它按预期工作,但我不知道如何做到这一点,以便不是每个人都能只收听聊天号码并查看发送的每条新消息。我已经为它准备了一些中间件,但我不知道如何制作它,以便您只能收听特定频道(如果适用)。
好的,所以我为此使用了 laravel Echo,这使它变得更简单,因此您不必编写自己的身份验证入口点。
我也只是 return 根据模型中检查我需要的一切的某些方法判断真假。
Broadcast::channel('private-chat-{conversationId}', function ($user, $conversationId) {
if(!Model::HasAccess){
return false;
}
return true;
});
并确保您 return 在您的活动中使用私人频道。
public function broadcastOn()
{
return new PrivateChannel('private-chat-' . $this->conversationId);
}
public function broadcastAs()
{
return 'new.message';
}
Echo 代码如下所示。 https://laravel.com/docs/8.x/broadcasting#client-pusher-channels 快速设置。
Echo.private('private-chat-{{ $conversation->id }}')
.listen('.new.message', (e) => {
pushForeignMessage(e.message);
}).error(error => {
console.error('Could not subscribe to chat: ' + error.error)
window.errorMessage('Kon niet verbinden met de chat. U kan geen realtime berichten ontvangen.', 'danger')
});
我觉得这有点脏,但它可以工作并且可以满足我的需要。如果有人知道更好/更容易或 'the laravel way' 这样做,请告诉我。
所以我在 laravel 中使用推送器实现了一点聊天功能,因此它可以实时更新。每当发送消息时,我都会使用以下方法调用 broadcast(new MessageSent($message, $conversationId));
的事件。
public function broadcastOn()
{
return ['chat-' . $this->conversationId];
}
public function broadcastAs()
{
return 'new-message';
}
还有一段 js 将它推送到我的前端,这样调用
var channel = pusher.subscribe('chat-' + {{ $conversation->id }});
channel.bind('new-message', function(data) {
console.log(JSON.stringify(data));
pushForeignMessage(data.message);
});
它按预期工作,但我不知道如何做到这一点,以便不是每个人都能只收听聊天号码并查看发送的每条新消息。我已经为它准备了一些中间件,但我不知道如何制作它,以便您只能收听特定频道(如果适用)。
好的,所以我为此使用了 laravel Echo,这使它变得更简单,因此您不必编写自己的身份验证入口点。
我也只是 return 根据模型中检查我需要的一切的某些方法判断真假。
Broadcast::channel('private-chat-{conversationId}', function ($user, $conversationId) {
if(!Model::HasAccess){
return false;
}
return true;
});
并确保您 return 在您的活动中使用私人频道。
public function broadcastOn()
{
return new PrivateChannel('private-chat-' . $this->conversationId);
}
public function broadcastAs()
{
return 'new.message';
}
Echo 代码如下所示。 https://laravel.com/docs/8.x/broadcasting#client-pusher-channels 快速设置。
Echo.private('private-chat-{{ $conversation->id }}')
.listen('.new.message', (e) => {
pushForeignMessage(e.message);
}).error(error => {
console.error('Could not subscribe to chat: ' + error.error)
window.errorMessage('Kon niet verbinden met de chat. U kan geen realtime berichten ontvangen.', 'danger')
});
我觉得这有点脏,但它可以工作并且可以满足我的需要。如果有人知道更好/更容易或 'the laravel way' 这样做,请告诉我。