如何向多个渠道认证用户

时间:2019-06-19 18:38:40

标签: javascript php pusher pusher-js

我正在构建一个php / javascript应用程序,该应用程序允许每个单独的用户连接到其私有频道,例如private-channel.userID

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

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

例如,假设用户ID 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
            }
        }
    });

1 个答案:

答案 0 :(得分:0)

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

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

无论如何,也许您的问题也在别处,为什么一个用户试图进入另一个用户的频道?