Я пытаюсь настроить чат для изучения веб-сокета, все в laravel.Но когда я пытался использовать частный канал или канал присутствия, выдает ошибку 401 «Неаутентифицировано», поэтому, если я не могу аутентифицироваться, пользователь не может перейти на канал.
У меня есть незакомментированные строки config / app.php
Я создаю SPA с vuejs и laravel, поэтому необходимо пройти аутентификацию с помощью промежуточного программного обеспечения api: auth
BroadcastServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;
class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//Broadcast::routes(['middleware' => 'auth:api']);
Broadcast::routes(['middleware' => 'auth:api']);
require base_path('routes/channels.php');
}
}
channel.php
Broadcast::channel('App.User.{id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
Broadcast::channel('salachat.{chatid}', function ($user, $chatid) {
return $user;
});
Событие MessageChat.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;
use App\mensajes;
class MessageChat implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public function __construct(mensajes $message){
$this->message = $message;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PresenceChannel('salachat.'. $this->message->Chat_id);
}
}
bootstrap.js
import Echo from 'laravel-echo'
window.Pusher = require('pusher-js');
window.Echo = new Echo({
//authEndpoint: '/broadcasting/auth',
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
//cluster: process.env.MIX_PUSHER_APP_CLUSTER,
//encrypted: true,
wsHost: window.location.hostname,
wsPort: 6001,
disableStats: true,
auth: {
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer ' + localStorage.getItem('PinguToken'),
'X-CSRF-TOKEN': token.content,
},
}
});
Вызов на канал
Echo.join('salachat.'+self.idchat)
.listen('MessageChat', (event)=>{
console.log(event);
self.messagechat.push(event.message);
});