Вещание с помощью Pusher завершается неудачно с TOKEN_INVALID, если я не полностью обновлю страницу - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь транслировать события с помощью Laravel Echo (с помощью Vue). Это моя установка:

BroadcastServiceProvider

class BroadcastServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Broadcast::routes(['middleware' => ['jwt.auth']]);

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

Эхо-конфигурация

window.Echo = new Echo({
  broadcaster: 'pusher',
  key: '...',
  cluster: 'eu',
  encrypted: true,
  namespace: 'App.Events',
  authEndpoint: `${window.location.origin}/broadcasting/auth`,
  auth: {
    headers: {
      'Authorization': `Bearer ${localStorage.getItem('quiz-token')}`
    }
  }
})

компонент Main Vue, где должно происходить вещание

  mounted () {
    this.gameKey = 'game.' + this.$route.params.id

    Echo.join(this.gameKey)
      .here((users) => {
        console.warn(users.length + ' online in game ' + this.gameKey)
      })
  }

channels.php

Broadcast::channel('game.{gameId}', function ($user, $gameId) {
    // Auth validation here
});

Теперь проблема в том, что когда я запускаю игру, я получаю 401 TOKEN_INVALID Ошибка:

Error Однако, если я обновляю страницу вручную (F5), я внезапно подключаюсь к Pusher, и все работает нормально.

Я подозреваю, что это действительно связано с тем, что токены являются недействительными, но я понятия не имею, почему - я тестирую в окне инкогнито, поэтому теоретически я вхожу в систему впервые, что означает, что токены совершенно новые.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 11 апреля 2019

Я думаю, что вы должны пройти аутентификацию, и если вы слушаете канал, он не разрешен для зарегистрированного пользователя.Если вы аутентифицированы, проверьте файл channel.php , чтобы он возвращал значение true, если идентификаторы идентичны

...