我最近查看了我的推送错误日志并注意到:
无效签名:预期的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令牌传递给我们的后端会发生此错误吗?
答案 0 :(得分:1)
您正在使用$pusher->presence_auth
为私人频道创建签名,即以private-
为前缀的频道。但presence_auth
旨在验证在线频道,即以presence-
为前缀的频道。
如果您希望使用状态数据,可以使用presence-
频道前缀。如果您希望使用没有状态信息的private-
频道,可以使用:
$pusher->socket_auth($request->input('channel_name'), $request->input('socket_id'))