订阅私人频道时的 Pusher/Laravel 回显错误:订阅频道的身份验证值无效:格式应为“密钥:签名”

Posted

技术标签:

【中文标题】订阅私人频道时的 Pusher/Laravel 回显错误:订阅频道的身份验证值无效:格式应为“密钥:签名”【英文标题】:Pusher/Laravel echo error on subscribing to private channel: Auth value for subscription to channel is invalid: should be of format 'key:signature' 【发布时间】:2019-05-29 04:39:29 【问题描述】:

我在使用 React 应用程序中的 PusherJS 订阅私人频道时遇到问题。

后端是 Laravel,但我很确定 后端/前端 技术不会造成这个问题。

我正在使用 JWT 令牌进行身份验证,这部分似乎一切正常。整个应用程序运行良好,但我正在尝试向系统添加一个套接字。

我将在这里提供我的后端和前端代码 sn-ps,因为我很确定问题出在它们身上。

前端

const Socket = new Echo(
  broadcaster: 'pusher',
  key: config.pusher.key,
  cluster: config.pusher.cluster,
  authEndpoint: config.pusher.authEndpoint,
  forceTLS: config.pusher.tls,
  auth: 
    headers: 
      Authorization: `Bearer $token`,
    ,
  ,
);

Socket.private('users.1').listen('newMessage', (data) => 
    console.log(data);
)

后端身份验证端点

public function authorize(Request $request) 
    echo Pusher::socket_auth($request->get('channel_name'), $request->get('socket_id'));
    return;

auth端点起作用,数据返回如下:

auth: ":2535a2ea3a1ee8f461ceef3a95095518c0205949aa981e6f2xxxxx"

在控制台中我可以看到前端应用程序已成功连接推送器

Pusher:状态改变:正在连接 -> 使用新的套接字 ID xxxxxx.xxxxxx 连接

但是订阅失败了

Pusher:发送的事件:"event":"pusher:subscribe","data":"auth":":2535a2ea3a1ee8f461ceef3a9​​5095518c0205949aa981e6f2xxxxx","channel":"private-users.1"

Pusher : Event recd : "event":"pusher:error","data":"code":null,"message":"订阅 private-users.1 的验证值无效:应该是格式'key:signature'"

Pusher : 错误 : "type":"WebSocketError","error":"type":"PusherError","data":"code":null,"message":"订阅的验证值private-users.1 无效:格式应为 'key:signature'"

我尝试只使用 PusherJS 包 并且遇到了同样的问题。现在我尝试使用 Laravel Echo,结果是一样的。 另外重要的是,当我订阅非私人频道时,订阅工作正常,我可以通过频道成功接收消息。

Pusher 调试日志只告诉我同样的事情:

订阅 private-users.1 的身份验证值无效:格式应为“key:signature”

我已经调试了几个小时,但我不知道从哪里开始。

【问题讨论】:

【参考方案1】:

您的身份验证端点似乎没有正确响应。您的密钥、秘密和 appID 是否正确配置了服务器端?集群呢?这是正确配置的服务器和客户端吗?

【讨论】:

这可能是真的,但我相信我已经按照文档告诉我的方式完成了所有工作:pusher.com/docs/…。但是我刚刚看到我的身份验证字符串的第一个字符是“:”。我正在调查它。集群是什么意思 当您在 Pusher 中创建应用程序时,您可以决定您的应用程序在世界的哪个区域运行。默认情况下,它会自动将您的应用程序粘贴在美国的 Pusher MT1 区域。如果您转到推送器仪表板并查找您的应用程序凭据,您应该会看到您的应用程序配置在哪个集群中。然后您必须在客户端和服务器中指定它。

以上是关于订阅私人频道时的 Pusher/Laravel 回显错误:订阅频道的身份验证值无效:格式应为“密钥:签名”的主要内容,如果未能解决你的问题,请参考以下文章

列出频道订阅仅返回我的频道

订阅身份验证数据中的密钥无效,类型:websocketError

公共频道更改为私人频道时无法获取 Slack 频道信息

我如何“检查”频道是不是为私人频道?

Discord API / Restcord : 创建私人频道

Slackbot 可以从私人频道中提取消息并在另一个 Slack 频道中发布吗?