对不起,我的英语不是我的主要语言。 我使用laravel 5.4 + pusher + laravel echo进行广播。 没问题,公共频道一切正常。 但在私人频道上我也收到403错误。
我的事件(newpsignal.php):
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class newpSignal implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user_id;
public function __construct($user_id)
{
$this->user_id=$user_id;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('reload-account-'.$this->user_id);
}
}
我的channels.php
Broadcast::channel('reload-account-.{user_id}', function ($account,$user_id) {
return true; //Auth::id()===$user_id;
});
bootstrap.js
import Echo from 'laravel-echo'
window.Pusher = require('pusher-js');
window.Echo = new Echo({
authEndpoint: 'http://localhost/public/broadcasting/auth',
broadcaster: 'pusher',
key: '********', //its my key
cluster: 'eu',
encrypted: true,
});
刀片上的其他js代码(公开监听工作):
Echo.channel('<?php echo Redis::get('default_'.Auth::id());?>-market')
.listen('newSignal', function (e) {
doOrders(e.signal);
});
Echo.private('reload-account-<?php echo Auth::id();?>')
.listen('newpSignal', function (e) {
alert(e)
});
错误:
Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: in file C:\wamp64\www\vendor\laravel\framework\src\Illuminate\Broadcasting\Broadcasters\Broadcaster.php on line 65
Stack trace:
1. Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException->() C:\wamp64\www\vendor\laravel\framework\src\Illuminate\Broadcasting\Broadcasters\Broadcaster.php:65
2. Illuminate\Broadcasting\Broadcasters\Broadcaster->verifyUserCanAccessChannel() C:\wamp64\www\vendor\laravel\framework\src\Illuminate\Broadcasting\Broadcasters\PusherBroadcaster.php:50
3. Illuminate\Broadcasting\Broadcasters\PusherBroadcaster->auth() C:\wamp64\www\vendor\laravel\framework\src\Illuminate\Broadcasting\BroadcastManager.php:310
4. Illuminate\Broadcasting\BroadcastManager->__call() C:\wamp64\www\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php:221
5. Illuminate\Support\Facades\Facade->__callStatic() C:\wamp64\www\vendor\laravel\framework\src\Illuminate\Broadcasting\BroadcastController.php:19
6. Illuminate\Broadcasting\BroadcastController->authenticate() C:\wamp64\www\vendor\laravel\framework\src\Illuminate\Routing\Controller.php:54
7. call_user_func_array() C:\wamp64\www\vendor\laravel\framework\src\Illuminate\Routing\Controller.php:54
8. Illuminate\Routing\Controller->callAction() C:\wamp64\www\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php:45