Laravel Вещание, как авторизоваться на канале присутствия? - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь присоединиться к каналу присутствия (Publi c каналы работают хорошо), но я не могу заставить это работать:

Vue код:

mounted(){
        Echo.join('game.' + "0").here((users) => {
                alert("In the channel!");
            })
            .joining((user) => {
                console.log("Someone entered");
            })
            .leaving((user) => {
                console.log(user.name);
            })
            .listen('GameEvent', (e) => {
                console.log("Hey")
            });

            Echo.channel('NewSentence')
                .listen('NewSentence',(sentence)=>{
                    alert("HOLA");
                });
    }

Я пытаюсь присоединиться к каналу "game.0". Поскольку я использую Laravel Passport, мне нужно аутентифицировать себя с помощью токена, и это работает. Отправка запроса авторизации для Laravel Echo возвращает ключ, но события JavaScript не вызывают .here(), .listening() ....

Функция загрузки поставщика BroadcastService:

public function boot() {
        Broadcast::routes(["middleware" => "auth:api"]);
        require base_path('routes/channels.php');
    }

каналов. php

Broadcast::channel('game.0', function ($user,$id) {
   return ['id' => $user->id];


});

Маршрут аутентификации:

Route::post('/broadcasting/auth', function(Request $request){
$pusher = new Pusher\Pusher(
    env('PUSHER_APP_KEY'),
    env('PUSHER_APP_SECRET'),
    env('PUSHER_APP_ID'),
    array(
        'cluster' => env('PUSHER_APP_CLUSTER'),
        'useTLS' => false,
        'host' => '127.0.0.1',
        'port' => 6001,
        'scheme' => 'http',
    )
);

return $pusher->socket_auth($request->request->get('channel_name'),$request->request->get('socket_id'));
});

Do I нужно сделать что-то дополнительно, чтобы это работало? Это запрос авторизации:

enter image description here

enter image description here

РЕДАКТИРОВАТЬ: GameEvent event:

class GameEvent implements ShouldBroadcastNow {
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $gameEvent;
    public $gameId;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($gameEvent, $gameId) {
        //
        $this->gameEvent = $gameEvent;
        $this->gameId = $gameId;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\PresenceChannel|array
     */
    public function broadcastOn() {
        //return new PrivateChannel('channel-name');
        return new PresenceChannel('game.0');
    }

    public function broadcastWith() {
        return $this->gameEvent;
    }

}

РЕДАКТИРОВАТЬ:

Я жестко закодировал имена: 'game.0' теперь жестко закодирован на маршруте routes/channels.php, в подключении Echo и в GameEvent , Я также удалил broadcastAs(). После входа в панель отладки laravel -websockets я обнаружил, что канал, на который я хочу подписаться, даже не появляется. Похоже, он не установит соединение, но я не могу понять, что это происходит.

Я жестко закодировал

1 Ответ

0 голосов
/ 14 апреля 2020

Проблема здесь заключается в том, что Echo не прослушивает правильный канал. Во-первых, Echo.join использует канал game.0, в котором 0 - это идентификатор пользователя, и я не думаю, что на самом деле есть пользователь с идентификатором 0. Во-вторых, вы вещаете как

GameEvent

и Echo подключается к каналу с именем game. {Id} Я предлагаю вам либо удалить функцию broadcastAs () из своего события файл или прослушать GameEvent . Также используйте приборную панель websocket для тестирования этого. Панель мониторинга будет доступна по маршруту

/ laravel -websockets

автоматически, что доступно только для локальной среды, поэтому убедитесь, что среда является локальной в вашей. env.

Используйте панель отладки, предоставленную laravel -websockets для отправки данных на каналы, сначала подключитесь к веб-сокету в панели мониторинга, затем просто введите имя канала, имя события и данные в формате JSON и нажмите отправить на приборной панели. Laravel Websockets Dashboard Image Попробуйте выяснить, помогает ли это в решении вашей проблемы.

Я также рекомендую внимательно прочитать официальную документацию laravel о вещании , а также laravel - руководство по отладке веб-розетки . Также обновите то, что вы получили в результате на этот вопрос.

...