Laravel Echo Server无法通过身份验证,获得HTTP状态403

问题描述 投票:0回答:1

我用laravel-echo-server获得了Laravel 5vuejs应用程序,我试图通过套接字将前端连接到后端。

我已经设法通过Echo.channel()方法将所有内容连接在一起,但它不会订阅Echo.private()

这是我到目前为止所得到的:

页面加载后我调用:

我启动了Echo通过

window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001',
csrfToken : Laravel.csrfToken,
auth : {
    headers : {
        Authorization : "Bearer b6f96a6e99e90dzzzzzzz"
    }
}

});

然后我通过vue resourse创建一个新事件

Vue.http.get('/api/errors/get');

这引发了laravel event(new \App\Events\ErrorsEvent());事件

通过私下广播活动

public function broadcastOn()
{
    return new PrivateChannel('errors');
}

在这一点上,laravel-echo-server回应

Channel: private-errors
Event: App\Events\ErrorsEvent
CHANNEL private-errors

然后我尝试通过运行订阅带回声的频道

Echo.private('errors')
           .listen('ErrorsEvent', (e) => {
           this.errors = e.errors;
        console.log(e);
       });

laravel-echo-server回应

[14:47:31] - xxxxxxxxxxxxxx could not be authenticated to private-errors

Client can not be authenticated, got HTTP status 403

有人知道我在这里遗失了什么吗?

编辑

这是我的BroadcastServiceProvider

public function boot(Request $request)
{

    Broadcast::routes();
    /*
     * Authenticate the user's personal channel...
     */
    Broadcast::channel('App.User.*', function ($user, $userId) {
        return (int) $user->id === (int) $userId;
    });
}

另外,我发现如果我尝试订阅

Echo.private('App.User.2')
       .listen('ErrorsEvent', (e) => {
       this.errors = e.errors;
    console.log(e);
   });

它连接,一切都很好,但它仍然拒绝与errors频道连接

laravel sockets authentication vuejs2 laravel-echo
1个回答
0
投票

我的问题是我没有注意到app / config.php中有两个BroadcastServiceProvider::class条目

我只检查了第一个。一旦我取消注释App\Providers\BroadcastServiceProvider::class,我就不需要指定承载令牌。

我相信您无法在上述配置中连接errors频道的原因是您需要在BroadcastServiceProvider(或routes/channels.php)中更改您的呼叫

Broadcast::channel('errors', function ($user) {
        return true; //replace with suitable auth check here
});
© www.soinside.com 2019 - 2024. All rights reserved.