我正在构建一个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
}
}
});
答案 0 :(得分:0)
我不是PHP方面的专家,但是从您的代码来看,您似乎正在授权任何用户访问任何频道,这就是问题所在。
在服务器端,您应该检查系统中已登录用户的userId是否与他尝试预订的频道名称匹配。否则,拒绝连接。
无论如何,也许您的问题也在别处,为什么一个用户试图进入另一个用户的频道?