mso*_*wal 5 socket.io laravel laravel-authorization laravel-echo laravel-5.4
我对实时事件广播非常陌生,我有简单的 laravel-echo-server 设置并处理所有内容。我无法针对其他身份验证设置/定义身份验证,它始终guard检查
我已为每个守卫专用通道设置的身份验证路由,如下每个文档所示。user/default guardauth.phproutes/channel.php
对于 authguard 用户私人频道
Broadcast::channel('users.{id}', function ($user, $id) {
Log::info(class_basename($user));
return (int) $user->id === (int) $id;
});
Run Code Online (Sandbox Code Playgroud)
对于 authguard 管理员私人频道
Broadcast::channel('admins.{id}', function ($admin, $id) {
Log::info(class_basename($admin));
return (int) $admin->id === (int) $id;
});
Run Code Online (Sandbox Code Playgroud)
它对于第一个案例的守卫工作得很好user,但对于第二个案例(即守卫)却不起作用admin。和
Log::info(class_basename($admin))总是返回User类。
那么,我们如何传递或定义它应该使用adminguard而不是user. 探索内部之后Illuminate\Broadcasting\Broadcasters\Broadcaster我发现下面一行411
public function user($guard = null)
{
return call_user_func($this->getUserResolver(), $guard);
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我们能传递这个guard参数就可以解决目的了。如果有人能给我任何东西或授权多个警卫设置的方式,那将非常有帮助。使用Laravel 5.4, laravel-echo-server, Redis, Socket.IO
小智 0
就像在其他地方一样,只需在闭包中使用Request 门面即可。
在你的情况下:
Broadcast::channel('admins.{id}', function ($user, int $id) {
return Request::user('admin')->id === $id;
});
Run Code Online (Sandbox Code Playgroud)
发送到闭包的参数不能由用户更改,它由 laravel 框架控制。(参见BroadcastManage和RedisBroadcaster,或 的其他实现Illumiante\Contracts\Broadcasting\Broadcaster)
| 归档时间: |
|
| 查看次数: |
2837 次 |
| 最近记录: |