Я пытаюсь подключиться к каналу присутствия присутствия , используя Laravel Эхо. Я также использую Laravel Паспорт. Я следовал многим учебникам, но я получаю 403 кода ошибки, 302 кода и так далее. Я размещаю свой сервер веб-сокетов локально, используя библиотеку laravel -websockets для обработки соединений. Vue - моя библиотека переднего плана.
Вот что я попробовал:
Отредактируйте BroadcastServiceProvider загрузочную функцию.
public function boot() {
Broadcast::routes(["prefix" => "api", "middleware" => "auth:api"]);
require base_path('routes/channels.php');
}
Добавьте маркер авторизации в заголовки Echo и добавьте свойство authEndpoint
в bootstrap. js
window.Echo = new Echo({
broadcaster: 'pusher',
authEndpoint: '/broadcasting/auth',
key: process.env.MIX_PUSHER_APP_KEY,
auth:{
headers:{
'Authorization': 'Bearer ' + auth_token,
}
},
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
//encrypted: false
wsHost: window.location.hostname,
wsPort: 6001});
Попробуйте присоединиться к каналу с 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")
});}
маршрутов / каналов. php файл:
Route::prefix('/user')->group(function(){
Route::post('/login','api\v1\LoginController@Login');
Route::middleware('auth:api')->get('/all','api\v1\user\UserController@index');});
Файл событий :
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\Channel|array
*/
public function broadcastOn()
{
//return new PrivateChannel('channel-name');
return new PresenceChannel('game.0');
}
public function broadcastWith(){
return $this->gameEvent;
}
}
На данный момент , если я пытаюсь подключиться к каналу, запрос broadcasting / auth получает код 302 (найдено). Я нашел ответ в другом посте, который утверждал, что решил эту проблему, добавив его в файл route / web. php.
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',
)
);
ЭТО РАБОТАЛО , запрос широковещания / авторизация дает код 200, и я получаю это в ответ: {"auth":"ABCFEDG:0bfff7db6506158755b012a47873799849d4e6b331f68da4bedd1caea04ad657"}
но функции here, joining, leaving
не запускаются.
Echo.join('game.0')
.here((users) => {
alert("In the channel!");
})
Что мне сделать, чтобы заставить это работать?
Снимок экрана сетевого инспектора: