当前位置: 首页 > 知识库问答 >
问题:

专用信道上的Laravel回声推送器订阅错误

田柏
2023-03-14

在使用私人频道时,我无法让echo和pusher正常工作,在谷歌上搜索了两天,找到了nada。

似乎正在发生的是某种身份验证问题(我使用Laravel基本身份验证),因为我可以订阅公共频道

路线/频道。php

Broadcast::channel('private-ci-received-{userId}', function ($user, $userId) {
    return (int) $user->id === (int) $userId;
});

Broadcast::channel('private-ci-received-{toUserId}', function ($currentUser, $toUserId) {
    return true;
});

bootstrap.js

import Echo from 'laravel-echo'

 window.Pusher = require('pusher-js');

 window.Echo = new Echo({

     broadcaster: 'pusher',
     key: process.env.MIX_PUSHER_APP_KEY,
     cluster: process.env.MIX_PUSHER_APP_CLUSTER,
     logToConsole: true,
     encrypted: true,
 });

default.blade.php(主要布局)

        Pusher.logToConsole = true;
        Echo.logToConsole = true;

        Echo.private('ci-received-{{ Auth::user()->id}}')
            .listen('.CIReceived', (e) => {
                console.log(e);
            });

控制台上打印的内容是:

Pusher : No callbacks on private-ci-received-1 for pusher:subscription_error

这是一个非常普通的错误,然后为了调试的目的,我试图使用Pusher(而不是laravel echo)绑定错误

var pusher = new Pusher('MYSECRETAPPKEYHERE', {
            cluster: 'us2',
            forceTLS: true
        });

        var channel = pusher.subscribe('private-ci-received-1');
        channel.bind('pusher:subscription_error', function(data) {
            console.log(data);
        });

console.log(数据)输出

JSON returned from webapp was invalid, yet status code was 200

默认的AuthEndPoint是 /broadcasting/authIIRC我认为它期望返回JSON,但它从我的页面返回超文本标记语言CODE。

这些路由是由框架本身创建的,根据我所阅读的内容,Laravel echo和Laravel Auth应该可以很好地协同工作,而不需要太多的修改。

我的env文件是正确的,我正在使用pusher作为广播驱动程序,并且BroadcastServiceProvider没有注释。

有人能解释这件事吗?谢谢

共有3个答案

毕黎昕
2023-03-14

在广播中,您不需要在频道中添加私人频道。php这是自动完成的

试试这个

Broadcast::channel('ci-received-{userId}', function ($user, $userId) {
    return (int) $user->id === (int) $userId;
});
西门飞星
2023-03-14

在您的. env文件中设置APP_DEBUG=true,并在浏览器开发工具的网络部分检查您的授权路由的HTTP响应。如果身份验证成功,您的laravel应用程序应该像这样响应JSON:

{"auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}

如果出现错误,它将在响应中显示,因为您将调试模式设置为true。

靳高明
2023-03-14

这对我有用

的默认值。env是广播驱动程序=log

请换成

BROADCAST_DRIVER=pusher

我也得到了["没有回调私人用户.1的推动者:subscription_error"]

在做了上述更改之后,它对我来说很好

 类似资料:
  • 我花了很多时间来解决我的这个问题,阅读文档多次,谷歌在这里和那里:SO,Laracast,Larachat等,但仍然无法让Laravel回声订阅推动者存在频道,它没有显示任何错误在控制台选项卡 公共和私人频道工作正常,用户可以订阅,用户可以监听/触发事件 注意:在创建这篇文章之前,我有一些与我的当前问题相关的搜索问题,它们都没有答案 一些和我类似的问题: https://laravelquesti

  • 我正在尝试创建以下链: 因此,我需要得到5。但是在执行1,2和3之前,4。 代码运行正常,但我想退出 从

  • 我已经创建了一个通知系统,所有的设置和它的工作罚款,当我发送通知到推动者。但是当我试图在私人频道上收听时,我会出错。 这是我的bootstrap.js文件laravel-echo代码 这是我的主要html的元标记内容 以下是在应用程序中侦听的代码。js 这是我在控制台上遇到的错误 邮递http://localhost:3000/broadcasting/auth 419(身份不明) 提前谢谢

  • 大家好,我工作与Laravel回声和SocketIO没有Vue只有jQuery,但我有一个问题与私人渠道在这里我向你展示,我有两个事件正常和私人渠道正常渠道(todocanales我的事件Hola活动)工作正常,当我午餐的事件 在我的laravel echo服务器控制台中,向我展示: 在浏览器控制台中,我得到 ~~~对象{数据:对象,套接字:null}~~~ 所有完美的,但与私人频道我有问题Lar

  • 我试图用Laravel Echo在私人频道上收听,但它不只在私人频道上收听,公共频道工作正常。 我也在使用Beyondcode/Laravel-WebSocket包,它在WebSocket仪表板面板中显示了所有的连接和事件。它显示了包本身的私有连接、我的公共连接和所有触发的事件(私有和公共),但没有显示我的私有连接 如果触发该事件并将数据保存在数据库中,则所有操作都完全正常,只是在视图中,我没有从

  • 刚开始玩推送通知,我设法处理了所有的订阅过程,我正在数据库中保存endpoint和密钥。我的问题是,如果有的话,我应该遵循什么策略来删除数据库中的旧字幕详细信息?。所以,如果有人允许通知,他们撤销了权限,我怎么知道是谁从数据库中删除了详细信息?。因为如果用户取消订阅,我只会从pushManager获得空订阅。