【发布时间】: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":":2535a2ea3a1ee8f461ceef3a95095518c0205949aa981e6f2xxxxx","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”
我已经调试了几个小时,但我不知道从哪里开始。
【问题讨论】:
标签: php reactjs laravel pusher laravel-echo