#laravel-5 #broadcast #pusher
#laravel-5 #трансляция #толкатель
Вопрос:
В моем фреймворке Laravel 5.7 / Vuejs 2.6 я использую jwt.auth и установочный толкатель
Я проверяю токен xsfr для своей страницыhttps://imgur.com/a/CveJ6jh но я получил ошибку 419 в http://local/broadcasting/auth запрашивая и открывая ответ на этот URL, я вижу сообщение об истечении срока действия страницы.
В app/Events/NewMessage.php :
<?php
namespace AppEvents;
use IlluminateBroadcastingChannel;
use IlluminateQueueSerializesModels;
use IlluminateBroadcastingPrivateChannel;
use IlluminateBroadcastingPresenceChannel;
use IlluminateFoundationEventsDispatchable;
use IlluminateBroadcastingInteractsWithSockets;
use IlluminateContractsBroadcastingShouldBroadcast;
use AppMessage;
class NewMessage
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Message $message)
{
$this->message= $message;
}
/**
* Get the channels the event should broadcast on.
*
* @return IlluminateBroadcastingChannel|array
*/
public function broadcastOn()
{
return new PrivateChannel('messages.'.$this->message->to);
}
public function broadcastWith()
{
return ['messages' => $this->message];
}
}
В routes/channels.php :
Broadcast::channel('messages.{id}', function ($user, $id) {
dd($user->id, $id);
return (int) $user->id === (int) $id;
});
Но я не вижу никакой информации об отладке сверху.
Я использовал параметры pusher из моего предыдущего приложения. Я думаю, что они должны быть в порядке. В противном случае у меня была бы другая ошибка?
и в компоненте vue :
mounted() {
Echo.private(`messages.${this.customerRow.id}`)
.listen('NewMessage', (e) => {
this.hanleIncoming(e.message);
});
Что я пропустил?
Спасибо!
Ответ №1:
Причина этой ошибки в том, что Laravel ожидает токен CSRF.
У вас есть два варианта:
- Включите токен CSRF (лучше для безопасности)
- Отключите CSRF для этого URL
Комментарии:
1. Я попробовал 2-й способ и получил ошибку: 403 Запрещено. Я не уверен, что это правильный путь?
2. 419 — это определенно ошибка CSRF. 403, должно быть, пришел откуда-то еще. У вас есть промежуточное программное обеспечение авторизации, которое выдает его?
3. Как я уже писал, я использую jwt.auth . Какое промежуточное программное обеспечение авторизации я должен проверить ?
4. Посмотрите на трассировку стека 403, чтобы увидеть, куда она выбрасывается.
Ответ №2:
чтобы решить эту проблему, вам нужно добавить промежуточное программное обеспечение на широковещательные маршруты, например, так.
Broadcast::routes(['middleware' => 'auth:api']);
Это на app/Providers/BroadcastServiceProvider.php