首先,我想说,我知道有很多关于这个主题的话题。我几乎都读过它们,但没有成功。
我正在使用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}
,但这也不起作用。
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.有人可以帮忙,因为我迷路了。
答案 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
的身份验证请求。
您可以在浏览器开发者工具的“网络”标签中对此进行验证。