推送客户端错误:签名无效

时间:2017-05-19 14:32:40

标签: ios swift pusher pusherswift

我最近查看了我的推送错误日志并注意到:

  

无效签名:预期的HMAC SHA256十六进制摘要   217478.6054950:private-production1_xxxxx_1232:{“user_id”:xxxx},但得到707d39519ca7f971a134524d8fe2ebafbddd64f42b6af0a20d6a73fxxxxxxx

一般来说,我们的websockets工作正常。我们有很多客户工作得很好,一般来说套接字似乎没有问题。这是我第一次注意到这个错误,并且我经常检查错误日志。这是我应该关注的吗?我可以确认private频道通常正常运作。

在前端,代码如下:

let options = PusherClientOptions(
  authMethod: AuthMethod.authRequestBuilder(authRequestBuilder: AuthRequestBuilder()
)
pusher = Pusher(key: pusherKey!, options: options)

class AuthRequestBuilder: AuthRequestBuilderProtocol {
  func requestFor(socketID: String, channel: PusherChannel) -> NSMutableURLRequest? {
    let request = NSMutableURLRequest(url: URL(string: "https://\(baseURLPrefix).xxxxxx.com/xxxxx/xxxxx")!)
    request.httpMethod = "POST"
    request.httpBody = "socket_id=\(socketID)&channel_name=\(channel.name)".data(using: String.Encoding.utf8)
    request.addValue(
      "Bearer " + authToken, forHTTPHeaderField: "Authorization"
    )
    return request
  }
}

在后端(Laravel应用程序):

// Controller

public function presence_auth(Request $request)
{
    $pusher = new Pusher(
        config('broadcasting.connections.pusher.key'),
        config('broadcasting.connections.pusher.secret'),
        config('broadcasting.connections.pusher.app_id')
    );

    return $pusher->presence_auth($request->input('channel_name'), $request->input('socket_id'), AuthUser()->id);
}

如果他们将错误的Bearer令牌传递给我们的后端会发生此错误吗?

1 个答案:

答案 0 :(得分:1)

您正在使用$pusher->presence_auth为私人频道创建签名,即以private-为前缀的频道。但presence_auth旨在验证在线频道,即以presence-为前缀的频道。

如果您希望使用状态数据,可以使用presence-频道前缀。如果您希望使用没有状态信息的private-频道,可以使用:

$pusher->socket_auth($request->input('channel_name'), $request->input('socket_id'))