0

我正在构建一个 php/javascript 应用程序,它允许每个用户连接到他们的私人频道,例如 private-channel.userID

用户通过以下身份验证端点进行身份验证,请参见下面的代码。

但是,在用户通过身份验证后,他们似乎还可以订阅其他私人频道并发送/接收消息。

例如,假设 userID 100 应该订阅 private-channel.100。在通过端点进行身份验证后,他还可以将消息发送到 private-channel.200 或其他任何 private-channel.userID !!!

无论如何,允许用户 100 仅对私人频道进行身份验证。100 并且不能订阅其他私人频道

我认为身份验证端点有问题,但无法弄清楚是什么。

非常感谢!

public function pusherAuth(Request $request){
    $pusher = new Pusher(
        config('broadcasting.connections.pusher.key'),
        config('broadcasting.connections.pusher.secret'),
        config('broadcasting.connections.pusher.app_id'),
        config('broadcasting.connections.pusher.options')
    );
    $request->headers->set('Accept', 'application/json');
    // return $pusher->socket_auth($request->channel_name, $request->socket_id);
    //$channel = $request->channel_name;response()->json(
    // $request->headers->set('Accept', 'application/json');
    $auth = $pusher->socket_auth($request->channel_name, $request->socket_id);
    $jsn = json_decode($auth,true);
    // return response($auth)->header('Content-Type',"application/json");
    return response()->json($jsn);
    // re\turn ['auth' => $jsn->auth];
}

php客户端代码:

connectToPusher() {
    this.pusher = new Pusher(window.Config.pusherKey, {
        authEndpoint: '/broadcasting/auth',
        cluster: window.Config.pusherCluster,
        auth: {
            headers: {
                'X-CSRF-Token': window.Config.csrfToken
            }
        }
    });
4

1 回答 1

0

我不是 PHP 专家,但从您的代码来看,您似乎授权任何用户访问任何频道,这就是问题所在。

在服务器端,您应该检查系统中登录用户的 userId 是否与他尝试订阅的频道名称匹配。否则拒绝连接。

无论如何,可能您的问题也在其他地方,为什么用户试图进入另一个用户的频道?

于 2019-07-31T11:10:58.420 回答