所以我尝试向一个频道广播,我已经确保广播工作。现在我想确保频道是私有的,只有授权用户可以收听它。现在根据文档,我可以通过创建授权回调并为该频道分配来实现这一点,所以我这样做了,我使用php artisan make:channel
命令创建了一个Channel类,并在routes/channel.php
中分配了Channel类,如下所示。
Broadcast::channel('private-admin.notifications.orders', OrderChannel::class);
字符串
通道类的内容如下。
class OrderChannel
{
/**
* Create a new channel instance.
*/
public function __construct()
{
//
}
/**
* Authenticate the user's access to the channel.
*/
public function join(User $user): array|bool
{
return false;
}
}
型
正如你可能已经注意到的,join
方法总是返回false,这是故意的,因为我想看看如果未经授权的用户连接到频道会发生什么。我希望用户将无法收听或订阅它,但用户仍然能够收听频道。我确信这一点,因为通知的代码触发并显示通知。
我做过的事。
- 当我运行
php artisan channel:list
命令时,config/app.php
中未注解的BroadcastServiceProvider::class
和channels.php
的所有内容都将返回。 - 已清除应用程序缓存。
我正在使用Laravel Websockets作为我的Websockets服务器,如果这与任何人有关。
我是做错了什么还是错过了什么?
1条答案
按热度按时间62o28rlo1#
所以在发布这个问题后,我花了一段时间进行了挖掘。我发现我的自定义广播认证端点可以通过
/custom/broadcasting/auth
使用,无论如何都会对用户进行认证,代码片段如下。字符串
它是laravel websockets默认身份验证方法的1:1副本,可通过
laravel-websockets/auth
使用。我不知道
validAuthenticationResponse()
方法将始终验证请求,我不得不使用laravel提供的默认身份验证端点,该端点可通过broadcasting/auth
使用。我不得不配置端点,因为它不接受我的请求。我不得不通过Laravel Echo提供一个自定义的身份验证方法,以便它接受请求。我的
Broadcast::routes
如下,这允许我的前端向身份验证端点发出成功的请求型
话虽如此,我现在使用的是laravel提供的默认身份验证端点,即
broadcasting/auth
端点,但在我的配置中,它现在是api/broadcasting/auth
。广播不再忽略我的
channels.php
,现在工作完全正常。这只是我这边的配置错误。