diff --git a/src/Illuminate/Auth/Authenticatable.php b/src/Illuminate/Auth/Authenticatable.php index d7578a3dcb1e..147d4179de67 100644 --- a/src/Illuminate/Auth/Authenticatable.php +++ b/src/Illuminate/Auth/Authenticatable.php @@ -31,6 +31,16 @@ public function getAuthIdentifier() return $this->{$this->getAuthIdentifierName()}; } + /** + * Get the unique broadcast identifier for the user . + * + * @return mixed + */ + public function getAuthIdentifierForBroadcasting() + { + return $this->getAuthIdentifier(); + } + /** * Get the password for the user. * diff --git a/src/Illuminate/Broadcasting/Broadcasters/AblyBroadcaster.php b/src/Illuminate/Broadcasting/Broadcasters/AblyBroadcaster.php index 1b7581119ba9..5205d29f3dba 100644 --- a/src/Illuminate/Broadcasting/Broadcasters/AblyBroadcaster.php +++ b/src/Illuminate/Broadcasting/Broadcasters/AblyBroadcaster.php @@ -72,11 +72,14 @@ public function validAuthenticationResponse($request, $result) $channelName = $this->normalizeChannelName($request->channel_name); + $user = $this->retrieveUser($request, $channelName); + $broadcastIdentifier = method_exists($user, 'getAuthIdentifierForBroadcasting') ? $user->getAuthIdentifierForBroadcasting() : $user->getAuthIdentifier(); + $signature = $this->generateAblySignature( $request->channel_name, $request->socket_id, $userData = array_filter([ - 'user_id' => (string) $this->retrieveUser($request, $channelName)->getAuthIdentifier(), + 'user_id' => (string) $broadcastIdentifier, 'user_info' => $result, ]) ); diff --git a/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php b/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php index 2ebe5da87f44..63a68f9c49c8 100644 --- a/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php +++ b/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php @@ -71,11 +71,14 @@ public function validAuthenticationResponse($request, $result) $channelName = $this->normalizeChannelName($request->channel_name); + $user = $this->retrieveUser($request, $channelName); + $broadcastIdentifier = method_exists($user, 'getAuthIdentifierForBroadcasting') ? $user->getAuthIdentifierForBroadcasting() : $user->getAuthIdentifier(); + return $this->decodePusherResponse( $request, $this->pusher->presence_auth( $request->channel_name, $request->socket_id, - $this->retrieveUser($request, $channelName)->getAuthIdentifier(), $result + $broadcastIdentifier, $result ) ); } diff --git a/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php b/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php index cf786955aeb7..e158563e7376 100644 --- a/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php +++ b/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php @@ -86,8 +86,11 @@ public function validAuthenticationResponse($request, $result) $channelName = $this->normalizeChannelName($request->channel_name); + $user = $this->retrieveUser($request, $channelName); + $broadcastIdentifier = method_exists($user, 'getAuthIdentifierForBroadcasting') ? $user->getAuthIdentifierForBroadcasting() : $user->getAuthIdentifier(); + return json_encode(['channel_data' => [ - 'user_id' => $this->retrieveUser($request, $channelName)->getAuthIdentifier(), + 'user_id' => $broadcastIdentifier, 'user_info' => $result, ]]); } diff --git a/tests/Broadcasting/AblyBroadcasterTest.php b/tests/Broadcasting/AblyBroadcasterTest.php index 81e172d1e2d4..74683de0a27b 100644 --- a/tests/Broadcasting/AblyBroadcasterTest.php +++ b/tests/Broadcasting/AblyBroadcasterTest.php @@ -123,6 +123,8 @@ protected function getMockRequestWithUserForChannel($channel) ->andReturn(false); $user = m::mock('User'); + $user->shouldReceive('getAuthIdentifierForBroadcasting') + ->andReturn(42); $user->shouldReceive('getAuthIdentifier') ->andReturn(42); diff --git a/tests/Broadcasting/PusherBroadcasterTest.php b/tests/Broadcasting/PusherBroadcasterTest.php index 18159f479fd7..cb5349227fef 100644 --- a/tests/Broadcasting/PusherBroadcasterTest.php +++ b/tests/Broadcasting/PusherBroadcasterTest.php @@ -161,6 +161,8 @@ protected function getMockRequestWithUserForChannel($channel) ->andReturn(false); $user = m::mock('User'); + $user->shouldReceive('getAuthIdentifierForBroadcasting') + ->andReturn(42); $user->shouldReceive('getAuthIdentifier') ->andReturn(42); diff --git a/tests/Broadcasting/RedisBroadcasterTest.php b/tests/Broadcasting/RedisBroadcasterTest.php index d381188b87e0..3345c7c26ef5 100644 --- a/tests/Broadcasting/RedisBroadcasterTest.php +++ b/tests/Broadcasting/RedisBroadcasterTest.php @@ -170,6 +170,8 @@ protected function getMockRequestWithUserForChannel($channel) $request->channel_name = $channel; $user = m::mock('User'); + $user->shouldReceive('getAuthIdentifierForBroadcasting') + ->andReturn(42); $user->shouldReceive('getAuthIdentifier') ->andReturn(42);