无法使用 Redis 和 Laravel 5.3 在私有频道上广播通知

Posted

技术标签:

【中文标题】无法使用 Redis 和 Laravel 5.3 在私有频道上广播通知【英文标题】:Not Able to Broadcast notifications on Private Channel with Redis & Laravel 5.3 【发布时间】:2017-09-23 18:51:48 【问题描述】:

我正在使用 Laravel-Redis-Socketio-LaravelEcho 制作实时通知。到目前为止,我可以广播到公共频道,但卡在私人频道。 我的 bootstrap.js:

import Echo from "laravel-echo"

window.Echo = new Echo(
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001'
);

Laravel-echo-server.json:

"authHost": "http://localhost",
    "authEndpoint": "/broadcasting/auth",
    "clients": [
        
            "appId": "Omitted purposely",
            "key": "Omitted purposely"
        
    ],
    "database": "redis",
    "databaseConfig": 
        "redis": ,
        "sqlite": 
            "databasePath": "/database/laravel-echo-server.sqlite"
        
    ,
    "devMode": true,
    "host": null,
    "port": "6001",
    "protocol": "http",
    "socketio": ,
    "sslCertPath": "",
    "sslKeyPath": ""

在我的通知类中,我将 broadcastOn() 设置为:

public function broadcastOn() 
        return new PrivateChannel('my-channel');
    

我的客户端是:

Echo.private('my-channel')
    .notification((notification) => 
        console.log('I am here');
    );

使用公共频道一切正常,但使用私人频道,命令行在启动 laravel-echo-server 后显示以下内容:

错误:连接 ECONNREFUSED 127.0.0.1:80。 发送身份验证请求时出错。

【问题讨论】:

【参考方案1】:

您必须通过取消注释 config/app.php 中的以下行来添加 broadcast authentication 路由

App\Providers\BroadcastServiceProvider::class,

这样在您的routes/channel.php 中将检查特定的守卫并根据您的条件返回 1 或 0

【讨论】:

以上是关于无法使用 Redis 和 Laravel 5.3 在私有频道上广播通知的主要内容,如果未能解决你的问题,请参考以下文章

laravel 无法打开输入文件:artisan (5.3)

Laravel 5.3 迁移:1215 无法添加外键约束

Laravel 身份验证在 laravel 5.3 中无法正常工作

无法在 laravel 5.3 的 mac 上创建缓存目录

无法将数据从刀片传递到 vue(Laravel 5.3)

Vue 2 Laravel 5.3 Eloquent 无法从对象中检索数据