私人频道不在Laravel工作

时间:2018-01-17 11:09:16

标签: laravel pusher

在我的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);
    })

效果很好。但是,当我在ChannelPrivateChannel中更改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吗?

4 个答案:

答案 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 而没有顶级代码