【发布时间】:2018-02-13 15:04:18
【问题描述】:
我使用vuejs 获得了laravel-echo-server 和Laravel 5 应用程序,我正在尝试通过套接字将前端连接到后端。
我已经设法通过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 的频道
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 频道
【问题讨论】:
-
请显示您的广播路由以及您如何验证用户实例。
-
我遇到了类似的问题,你解决了吗?另外,您从哪里获得身份验证承载代码?
-
问题出在身份验证承载中。如果我没记错的话,在你启动 echo server 之前,你需要生成一个客户端 ID。这将创建 appId 和 & 密钥,您将其用作身份验证承载。
标签: laravel sockets authentication vuejs2 laravel-echo