在我的ChatEvent中我调用了函数
public function broadcastOn()
{
return new Channel('chat');
}
在app.js
我有Echo。
Echo.channel('chat')
.listen('ChatEvent', (e) => {
this.chat.message.push(e.message);
console.log(e);
})
效果很好。但是,当我在Channel
和PrivateChannel
中更改function broadcastOn()
至app.js
时,我会更改
Echo.private('chat')
.listen('ChatEvent', (e) => {
this.chat.message.push(e.message);
console.log(e);
})
我有错误POST broadcasting/auth 403 (Forbidden)
@@和
我可以使用Channel而不是PrivateChannel吗?
答案 0 :(得分:1)
如文档中所述,您必须为此私人频道定义授权规则
https://laravel.com/docs/5.5/broadcasting#authorizing-channels
编辑您的routes / channels.php文件
Broadcast::channel('chat', function ($user) {
return true; //for public access
// or
return $user->can('chat'); //using gate
});
否则使用该频道进行公共访问
答案 1 :(得分:1)
当您使用Private或PresenceChannel时,使用Laravel版本修复错误403 / broadcast / auth> 5.3& Pusher,您需要使用
更改 resources / assets / js / bootstrap.js 中的代码window.Echo = new Echo({
broadcaster: 'pusher',
key: 'your key',
cluster: 'your cluster',
encrypted: true,
auth: {
headers: {
Authorization: 'Bearer ' + YourTokenLogin
},
},
});
在 app / Providers / BroadcastServiceProvider.php 中更改
Broadcast::routes()
与
Broadcast::routes(['middleware' => ['auth:api']]);
或
Broadcast::routes(['middleware' => ['jwt.auth']]); //if you use JWT
它对我有用,希望对你有帮助。
答案 2 :(得分:0)
试试这个
在聊天事件中添加
public function broadcastAs()
{
return 'new.chat';
}
在你的javascript文件中
Echo.channel('chat')
.listen('.new.chat', (e) => {
console.log(e);
})
答案 3 :(得分:0)
如果使用api
window.Echo.connector.options.auth.headers['Authorization'] = `Bearer ${user.api_token}`;
如果使用 session auth 而没有顶级代码