0

首先我想说,我知道关于这个主题真的有很多话题。我几乎都阅读了它们,但没有成功。

我正在使用 Laravel Echo 和 Pusher 来使 websockets 工作。这实际上适用于普通(阅读:非私人)频道。我收到了状态良好的 Javascript 对象。

问题开始的地方是当我尝试在私人频道上发送内容时。我在控制台中收到以下警告:
Pusher : Couldn't get auth info from your webapp : 500

我猜这是由于验证私人频道的问题。我试图在以下地方对它们进行身份验证:

广播服务提供者:

class BroadcastServiceProvider extends ServiceProvider
{

    public function boot()
    {
        Broadcast::routes();

        /*
         * Authenticate the user's personal channel...
         */
        Broadcast::channel('notification.{userid}', function ($user, $userid) {
             return true;
        });
    }
}

或路由/channels.php:

<?php

use Illuminate\Support\Facades\Broadcast;

Broadcast::channel('notification.{userid}', function ($user, $userid) {
    return (int) $user->id === (int) $userId;
});

但这些都不起作用。我还尝试将通配符更改为 a *,而不是 the ,{userid}但这也不起作用。

但是,Pusher 以正常的形式显示事件。所以他们被发送了,只有 Echo 的接收才会出现问题。我的 Echo 配置如下所示:

this.websocket = new Echo({
    broadcaster: 'pusher',
    key: 'KEY',
    cluster: 'eu',
    encrypted: false,
    authEndpoint: 'http://127.0.0.1:8000/broadcasting/auth'
});

this.id = 1;

this.websocket.private('notification.' + this.id).listen('CreditsSent', e => {
    console.log(e);
});

我正在使用 Laravel 5.4 和 PHP 7.x。有人可以帮忙吗,因为我迷路了。

4

2 回答 2

2

我自己想通了。不久前,我将我的项目从 Laravel 5.3 更新到了 5.4。我希望我手动创建的 channels.php 是自动导入的。原来我必须在我的broadcastServiceProvider. 现在一切正常:)

于 2017-08-26T07:33:21.600 回答
0

您的应用程序模板必须包含<meta name="csrf-token" content="{{ csrf_token() }}">head元素中,或者您可以window.Laravel.csrfToken在使用Echo.

确保Echo发出包含CSRF-Token标头中的身份验证请求。

您可以在浏览器开发人员工具的网络选项卡中验证这一点。

于 2017-08-23T12:21:03.930 回答