Pusher专用频道订阅中出现意外错误

时间:2019-02-03 07:55:26

标签: javascript php pusher subscribe

在JS + PHP(宅基地)环境中,在Pusher中订阅公共频道效果很好(也验证了我的凭据)。给出以下代码,订阅私人频道失败:

 let theAppId = 'XXXYYYZZZ'; //fake credentials shown here...
 pusher = new Pusher(theAppId, {
    authEndpoint: '/pusher/auth',
    cluster: 'us2',
    forceTLS: true,
    encrypted: true,
    auth: {headers: {'X-CSRF-Token': self.csrf}}
});
channel = pusher.subscribe('private-channel1');

我的身份验证代码被调用并返回有效的身份验证信号:

{\"auth\":\"c289b20c368bd23a4a85:d55f1f1495f0d252b5fde1d69e2e6d5b4b161ca49cab5ad218d65111ae307a12\"}"}

成功连接后,Pusher.log显示此错误:

Pusher : Event recd : {"event":"pusher:error","data":{"code":null,"message":"Invalid key in subscription auth data: '{\"auth\"'"}}
pusher.min.js:8 Pusher : Error : {"type":"WebSocketError","error":{"type":"PusherError","data":{"code":null,"message":"Invalid key in subscription auth data: '{\"auth\"'"}}}

我在Pusher文档中找不到关于此问题的任何提及。任何人都看到了这一点,或者对解决方法有任何想法?

2 个答案:

答案 0 :(得分:0)

此错误的最可能原因是auth哈希在从服务器返回之前已被“字符串化”。这就是为什么错误消息提到找到无效键的原因:该值不能被解析为JSON对象。

要解决此问题,服务器需要返回纯JSON。

答案 1 :(得分:0)

感谢Hosam的提示。对于您的Laravel用户而言,该问题很容易解决。请注意,您的身份验证路由的响应为json。从pusher->socket_auth创建有效的auth密钥返回的值是json编码的字符串。要解决此问题,只需对关联数组进行json_decode socket_auth响应,然后将其传递到控制器json响应中:

$thePusher = new \Pusher\Pusher(
   env('PUSHER_APP_KEY'),env('PUSHER_APP_SECRET'),env('PUSHER_APP_ID'),
      ['cluster'=>env('PUSHER_CLUSTER'),'useTLS'=>true]
);

$theResult=$thePusher->socket_auth(
   $aRequest>input('channel_name'),
   $aRequest->input('socket_id'));

return response()->json(json_decode($theResult,true),200);