Laravel广播:由于auth错误,私有频道无法正常工作

时间:2017-08-23 11:24:42

标签: javascript php laravel authentication laravel-echo

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

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

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

这是由于验证私人频道的问题,我想。我试着在以下地方验证它们:

BroadcastServiceProvider:

class BroadcastServiceProvider extends ServiceProvider
{

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

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

或routes / channels.php:

<?php

use Illuminate\Support\Facades\Broadcast;

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

但这一切都不起作用。我还尝试将通配符更改为*,而不是{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.有人可以帮忙,因为我迷路了。

2 个答案:

答案 0 :(得分:1)

自己想出来。前段时间,我将我的项目从Laravel 5.3更新到5.4。我预计我手动创建的channels.php会自动导入。原来我必须在broadcastServiceProvider内导入它。现在一切正常:)

答案 1 :(得分:0)

您的应用模板必须在<meta name="csrf-token" content="{{ csrf_token() }}">元素中有head,或者您可以在使用window.Laravel.csrfToken建立套接字连接之前设置Echo

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

您可以在浏览器开发者工具的“网络”标签中对此进行验证。