Эхо Laravel в приложении electronic-vue - join () не работает

Я создаю настольное приложение с помощью electronic-vue и бэкэнда laravel. Я настроил Laravel Echo в проекте, и использование Echo.channel() сработало отлично. Теперь я попытался использовать канал присутствия с Echo.join(), и, похоже, он вообще ничего не делает. Я вижу соединение в консоли отладки толкателя, но оно никогда не присоединяется к каналу. Самое странное, что он тоже никогда не делает запрос на мой сервер для авторизации.

В моем файле renderer/main.js я создаю экземпляр Echo:

window.Pusher = require('pusher-js')
window.Echo = new Echo({
  broadcaster: 'pusher',
  key: Keys.PUSHER_KEY,
  cluster: Keys.PUSHER_CLUSTER,
  forceTLS: true,
  authEndpoint: `${apiUrl}/broadcasting/auth`
})

if (localStorage.getItem('api_key')) {
  let key = localStorage.getItem('api_key')
  axios.defaults.headers.common['Authorization'] = 'Bearer ' + key
  window.Echo.connector.pusher.config.auth.headers['Authorization'] = 'Bearer ' + key
}

Затем в моем компоненте у меня есть следующий код для присоединения к каналу присутствия. Отображение исходит из vuex, поэтому я запускаю его из наблюдателя:

watch: {
  'display.id': {
    immediate: true,
    handler: function(newVal) {
      if (newVal) {
        this.joinPresenceChannel()
      }
    }
  }
},
methods: {
  joinPresenceChannel() {
    console.info(`joining presence channel: display.${this.display.id}`)
    Echo.join(`display.${this.display.id}`)
        .here((users) => {
          console.info('Users here: ')
          console.info(users)
        })
  }
}

Срабатывает console.info(), сообщающий о «присоединении к каналу присутствия», но console.info() в методе here() никогда не срабатывает. И, глядя на вкладку сети в Chrome, я вижу, что она никогда не делает запрос к /broadcasting/auth.

У меня есть все настройки для авторизации каналов. На самом деле у меня есть приложение inertiajs в проекте laravel, использующее тот же канал присутствия, с тем же кодом, и оно просто присоединяется к find. Я просто не могу заставить работать электронное приложение.

Может кто-то указать мне верное направление?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
551
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, я наконец добрался до сути. Проведя еще немного исследований, я обнаружил, что инструменты для разработки электронов, по-видимому, просто не показывали запрос на маршрут авторизации, так как я просмотрел свой access_log и увидел, что он действительно попадает на этот маршрут. В журнале доступа я также мог видеть, что получаю ответ 403.

Поскольку мне нужно, чтобы и мое электронное приложение, и мое инерционное веб-приложение могли аутентифицироваться на этих каналах, я изменил метод загрузки BroadcastServiceProvider, чтобы он выглядел следующим образом:

public function boot()
{
    Broadcast::routes(['middleware' => 'web']);
    Broadcast::routes(['prefix' => 'api', 'middleware' => ['api', 'auth:sanctum']]);

    require base_path('routes/channels.php');
}

Я также обнаружил, что это не будет работать, если вы не добавите промежуточное ПО auth:sanctum на маршрут API. Вы также должны обязательно обновить клиент, чтобы использовать маршрут /api/broadcasting/auth вместо маршрута по умолчанию /broadcasting/auth.

После внесения этих изменений, похоже, я могу нормально присоединиться к каналам присутствия.

Другие вопросы по теме