0

使用私人频道时,我无法让回声和推送器工作,谷歌搜索了两天并找到了 nada。

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

路由/channels.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;
});

引导程序.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(data) 输出

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

默认的 authEndPoint 是 /broadcasting/auth IIRC 我认为它希望返回 JSON,但它会从我的页面返回 HTML 代码。

这些路由是由框架本身创建的,从我读到的 Laravel echo 和 Laravel Auth 应该可以很好地协同工作,而不需要太多的摆弄。

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

任何人都可以阐明这件事吗?谢谢

4

3 回答 3

1

这对我有用

.env 的默认值为
BROADCAST_DRIVER=log

请将其更改为

BROADCAST_DRIVER=pusher

我也得到了 [“在 private-user.1 上没有回调 pusher:subscription_error”]

进行上述更改后,对我来说效果很好

于 2020-08-27T14:07:16.310 回答
0

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

{"auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}

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

于 2019-01-17T22:44:30.440 回答
0

您不需要在 broadcasting.php 中将 private- 添加到您的频道,这是自动完成的

尝试这个

Broadcast::channel('ci-received-{userId}', function ($user, $userId) {
    return (int) $user->id === (int) $userId;
});
于 2020-01-07T16:51:52.327 回答