当需要以某种方式限制对频道的访问时,应使用私有频道。为了让用户订阅私人频道权限,必须获得授权。当使用 private-
通道名称调用 subscribe
方法时,通过对可配置身份验证 url 的 HTTP 请求进行身份验证。
授权步骤:为了使用Pusher的私有频道进行安全消息通信,需要进行以下步骤:
pusher:connection_established(socket_id)
每个socket_id
是唯一的socket_id
。身份授权接口签名可以通过JSON形式进行验证。1. 安装依赖包
composer require pusher/pusher-php-server
2. 授权接口伪代码
public function pusherAuth(Request $request)
{
$param = $request->post();
if (!isset($param['channel_name']) || !isset($param['socket_id'])) {
return 403;
}
$options = array(
'cluster' => 'ap3',
'useTLS' => true
);
$pusher = new Pusher(
'108365f54d1d934e76781',
'9cfbfd3b06290c427de62',
'13394324',
$options
);
$presenceData = array('name' => 'Tinywan');
return $pusher->presenceAuth($param['channel_name'], $param['socket_id'], '1', $presenceData);
}
3. 身份验证接口地址
http://127.0.0.1:8787/test/pusher-auth
1. 客户端代码 private_channel_client.html
<!DOCTYPE html>
<head>
<title>Private channels</title>
<script src="https://js.pusher.com/7.0/pusher.min.js"></script>
<script>
// (1) 创建实例
const pusher = new Pusher('108365f54d1d934e76781', {
cluster: 'ap3',
authEndpoint: 'http://127.0.0.1:8787/test/pusher-auth',
// auth: { headers: { "X-CSRF-Token": "SOME_CSRF_TOKEN" } },
});
// (2) 订阅频道
var uid = 1;
var privateChannel = pusher.subscribe('private-user-' + uid);
// (3) 绑定事件
privateChannel.bind('private-event', function(data) {
alert(JSON.stringify(data));
});
</script>
</head>
<body>
<h1>Private channels Test</h1>
</body>
2. 服务端代码 private_channel_server.php
<?php
/**
* @desc pusher server
* @author Tinywan(ShaoBo Wan)
*/
require_once '../../vendor/autoload.php';
$options = array(
'cluster' => 'ap3',
'useTLS' => true
);
$pusher = new Pusher\Pusher(
'108365f54d1d934e76718',
'9cfbfd3b06290c427d1e6',
'13394341',
$options
);
$data['message'] = 'Hi Tinywan private 2022';
$pusher->trigger('private-user-1', 'private-event', $data);
3. 服务端推送消息
4. 客户端接收消消息
授权响应
接收消息