samedi 19 septembre 2020

Laravel echo how to set it to use custom driver?

I have the following in broadcasting.php:

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Broadcaster
    |--------------------------------------------------------------------------
    |
    | This option controls the default broadcaster that will be used by the
    | framework when an event needs to be broadcast. You may set this to
    | any of the connections defined in the "connections" array below.
    |
    | Supported: "pusher", "redis", "log", "null"
    |
    */

    'default' => env('BROADCAST_DRIVER', 'null'),

    /*
    |--------------------------------------------------------------------------
    | Broadcast Connections
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the broadcast connections that will be used
    | to broadcast events to other systems or over websockets. Samples of
    | each available type of connection are provided inside this array.
    |
    */

    'connections' => [

        'pusher' => [
            'driver' => 'pusher',
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'app_id' => env('PUSHER_APP_ID'),
            'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),
                'useTLS' => true,
            ],
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],

        'log' => [
            'driver' => 'log',
        ],

        'null' => [
            'driver' => 'null',
        ],
        'internal_chat_pusher' => [
            'driver' => 'pusher',
            'key' => env('INTERNAL_CHAT_PUSHER_APP_KEY'),
            'secret' => env('INTERNAL_CHAT_PUSHER_APP_SECRET'),
            'app_id' => env('INTERNAL_CHAT_PUSHER_APP_ID'),
            'options' => [
                'cluster' => env('INTERNAL_CHAT_PUSHER_APP_CLUSTER', 'ap2'),
                'useTLS' => true,
            ]
            ],

    ],


];

then in my controller I try to use 'internal_chat_pusher' driver as follow:

  public function send(Request $request)
    {
        $message = Message::create([
            'from' => auth()->id(),
            'to' => $request->contact_id,
            'text' => $request->text
        ]);
        // $internal = Broadcast::driver();
        \Config::set('broadcasting.default', 'internal_chat_pusher');
        broadcast(new NewMessage($message));
        \Config::set('broadcasting.default', 'pusher');
        return response()->json($message);
    }

in my JavaScript I try to subscribe user to channel using the following:

window.Echo = new Echo({
    broadcaster: 'pusher',
    driver: 'internal_chat_pusher',
    key: 'xxx',
    cluster: 'ap2',
    encrypted: true
});

but I get in Pusher debug console:

Invalid key in subscription auth data: 'xxxx'

here is my channels.php:

<?php

/*
|--------------------------------------------------------------------------
| Broadcast Channels
|--------------------------------------------------------------------------
|
| Here you may register all of the event broadcasting channels that your
| application supports. The given channel authorization callbacks are
| used to check if an authenticated user can listen to the channel.
|
*/

Broadcast::channel('messages.{id}', function ($user, $id) {
    return $user->id === (int) $id;
});

I guess the problem is related to something like the authentication and authorization are done aginst the 'pusher' driver not 'internal_chat_pusher' because when I set the key in echo to be the one in pusher I get subscribed successfully, so, how to solve this problem please?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire