我用laravel-echo-server
获得了Laravel 5
和vuejs
应用程序,我试图通过套接字将前端连接到后端。
我已经设法通过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
频道连接
我的问题是我没有注意到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
});