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

时间:2018-02-13 15:04:18

标签: laravel sockets authentication vuejs2 laravel-echo

我使用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频道

连接

1 个答案:

答案 0 :(得分: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
});