【问题标题】:Laravel authorization for Broadcast channels not working广播频道的 Laravel 授权不起作用
【发布时间】: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


【解决方案1】:

显然问题不在于编程方面,而是与您的 Web 服务器配置(或 Web 套接字服务器)有关。我认为您总是通过 /broadcusting/auth 简单地获得了私人频道的身份验证,因为响应为您提供了 200 个代码。正如您在laravel-echo-server sourse 中看到的那样,通道会残留身份验证。因此,您的routes/channels 可能不会参与该过程。此外,如果您从配置中排除BroadcastServiceProvider,您可能仍然会获得私有频道的身份验证。

如果一切都表明,我建议查看网络服务器配置,尤其是如果您使用 SSL。Alternative SSL implementationlaravel-echo-server.json 当然。

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 2021-11-15
    • 2021-07-15
    • 2020-07-23
    • 2018-10-10
    • 2019-08-28
    • 2021-06-01
    • 2020-03-24
    • 2017-10-03
    相关资源
    最近更新 更多