создать поток аутентификации частного канала в php для pusher

Я хочу реализовать чат с личными сообщениями, используя pusher PHP / JS API. Мне нужна помощь в настройке частного канала и конечной точки аутентификации с помощью php, из документации не ясно, существует ли способ по умолчанию для управления аутентификацией пользователей для частного канала. Я немного погуглил и нашел несколько примеров, но я не использую laravel, поэтому я не могу их применить. Любое предложение будет оценено по достоинству.

JS

Pusher.logToConsole = true;

          var pusher = new Pusher('12xxxxxx', {
            cluster: 'us',
            forceTLS: true
          });

          var channel = pusher.subscribe('private-encrypted-test-channel');
          channel.bind('message-event', function(data) {
            alert(JSON.stringify(data));
          });

          channel.bind('pusher:subscription_succeeded', function(members) {
            console.log(members);
            console.log('successfully subscribed!');
          });

PHP

require_once __DIR__.'/vendor/autoload.php';

$options = array(
  'cluster' => 'eu',
  'useTLS' => true
);
$pusher = new Pusher\Pusher(
  '12xxxxx',
  '2xxxxxx',
  '8xxxxxx',
  $options
);

$data['message'] = 'hello world';
$pusher->trigger('private-encrypted-test-channel', 'message-event', $data);

Как правильно аутентифицировать пользователей в php, а затем и в js для pusher API?


person jihuuNI    schedule 04.09.2019    source источник


Ответы (1)


Вам нужно будет создать другой файл PHP (например, pusher_auth.php) для выполнения аутентификации. Используйте этот код в качестве отправной точки (адаптированный из вашего кода и документации WordPress Pusher, поскольку WordPress под капотом - это просто слои PHP):

require_once __DIR__.'/vendor/autoload.php';

$options = array(
  'cluster' => 'eu',
  'useTLS' => true
);

$pusher = new Pusher\Pusher(
  '12xxxxx',
  '2xxxxxx',
  '8xxxxxx',
  $options
);

// You need to define this function for your application, but for testing purposes, it always returns true

function user_is_authenticated(){
    // Insert your logic here
    return true;
}

if ( user_is_authenticated() )
{
  echo $pusher->socket_auth($_POST['channel_name'], $_POST['socket_id']);
}
else
{
  header('', true, 403);
  echo "Forbidden";
}

Теперь измените свой JS-код таким образом, чтобы добавить параметр authEndpoint (измените имя и относительный путь в соответствии с вашим файлом аутентификации PHP)

var pusher = new Pusher('12xxxxxx', {
    cluster: 'us',
    authEndpoint: '/pusher_auth.php',
    forceTLS: true
});
person Brad K    schedule 29.09.2019