nuwave / lighthouse

A framework for serving GraphQL from Laravel
https://lighthouse-php.com
MIT License
3.33k stars 434 forks source link

GraphQL subscription with Laravel Reverb #2564

Open michaelLoeffelmann opened 3 weeks ago

michaelLoeffelmann commented 3 weeks ago

When a subscription request is received by Reverb, it throws the following error:

TypeError Laravel\Reverb\Protocols\Pusher\EventHandler::subscribe(): Argument #4 ($data) must be of type ?string, array given, called in /var/www/DemoGraphQL/vendor/laravel/reverb/src/Protocols/Pusher/EventHandler.php on line 29 at vendor/laravel/reverb/src/Protocols/Pusher/EventHandler.php:56

The error is caused by the payload data being an array instead of a string, which is expected by the subscribe method in the EventHandler class.

The payload that triggers the error looks like this:

[
  "channel_data" => [
    "user_id" => "363c7a56eee7c386bf2c4ac980b661e6"
    "user_info" => []
  ]
  "channel" => "private-lighthouse-vEibwD5lS5FA0xmHHrMuH3Z5A8nVSvbC-1717741629"
]

The authorizedMethod in the EchoBroadcaster Class should send an string for 'channel_data' instead an array.

Steps to reproduce

  1. Starting laravel reverb
  2. Add an Subscription to the Frontend

Output/Logs

Laravel Exception ``` TypeError Laravel\Reverb\Protocols\Pusher\EventHandler::subscribe(): Argument #4 ($data) must be of type ?string, array given, called in /Users/dev/Herd/lv-ep-gw-api/vendor/laravel/reverb/src/Protocols/Pusher/EventHandler.php on line 29 at vendor/laravel/reverb/src/Protocols/Pusher/EventHandler.php:56 52▕ 53▕ /** 54▕ * Subscribe to the given channel. 55▕ */ ➜ 56▕ public function subscribe(Connection $connection, string $channel, ?string $auth = null, ?string $data = null): void 57▕ { 58▕ $channel = $this->channels 59▕ ->for($connection->app()) 60▕ ->findOrCreate($channel); ```

**Lighthouse Version** 6.36.3
spawnia commented 6 days ago

Could it be the case that previous versions of Laravel Reverb required an array? How can we fix this without breaking backwards compatibility?