Получите ошибку 401 при попытке аутентификации в API с помощью Pusher и Laravel Echo - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь настроить чат для изучения веб-сокета, все в 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);
                        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...