Quickblox Rails签名

时间:2016-02-25 23:34:18

标签: ruby-on-rails sha1 quickblox

我很难获得访问quickblox API的权限。根据他们的文档,这段代码应该有效:

 require 'base64'
  require 'cgi'
  require 'openssl'
  require 'hmac-sha1'

  # Application credentials
  aPPLICATION_ID = 12345
  aUTH_KEY = 'hidden'
  aUTH_SECRET = 'hidden'


  # Generate signature
  timestamp = Time.now.in_time_zone('UTC').to_i
  nonce = timestamp-425346
  signature_string = "application_id=#{aPPLICATION_ID}&auth_key=#{aUTH_KEY}&nonce=#{nonce}&timestamp=#{timestamp}"
  signature =Base64.encode64("#{ OpenSSL::HMAC.digest('sha1', signature_string, aUTH_SECRET) }")

  # Post
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  request = Net::HTTP::Post.new("/session.json")
  request.add_field('QuickBlox-REST-API-Version', '0.1.1')
  request.add_field('Content-Type', 'application/json')
  request.add_field('Accept', '*/*')
  request.body = {"application_id" => aPPLICATION_ID, "auth_key" => aUTH_KEY, "nonce" => nonce, "timestamp" => timestamp, "signature" => signature }.to_json

  response = http.request(request)

但是我一直收到错误:{“errors”:{“base”:[“Unexpected signature”]}}

即使使用他们的投掷:http://hurl.quickblox.com/我也会得到完全相同的错误。很沮丧。我究竟做错了什么?

2 个答案:

答案 0 :(得分:0)

事实证明,QuickBlox似乎不接受ruby因某种原因产生的签名。 QuickBlox甚至删除了他们自己的ruby gem(其中也会产生同样的错误)。

现在解决方案是首先通过php脚本获取令牌,然后在ruby中进行调用。

答案 1 :(得分:0)

点击my stackoverflow answer on this issue

这主要归结为这两行:

signature_string = "application_id=#{aPPLICATION_ID}&auth_key=#{aUTH_KEY}&nonce=#{nonce}&timestamp=#{timestamp}"

signature =Base64.encode64("#{ OpenSSL::HMAC.digest('sha1', signature_string, aUTH_SECRET) }")

您也可以查看此quickblox_api gem。它对我很有用。