неопределенный метод `кодирование 'для #когда я отправил запрос на получение открытого ключа из API REST - PullRequest
0 голосов
/ 26 сентября 2019

Мое приложение использует Firebase.
Для получения сертификата существует метод public_securetoken_keys.
Он использует стандартную библиотеку Rails, net/http.

Вот и все.

  def public_securetoken_keys
    if (public_keys = Rails.cache.read('firebase_public_securetoken_keys')).present?
      return public_keys
    end

    uri = URI("https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com")
    https = Net::HTTP.new(uri.host, uri.port)
    https.use_ssl = true
    req = Net::HTTP::Get.new(uri.path)
    response = https.request(req)
    if response.code != '200'
      raise "Something went wrong: can't obtain valid JWT public keys from Google."
    end
    max_age = response["cache-control"][/max-age=(\d+?),/m, 1]
    public_keys = JSON.parse(response.body)
    Rails.cache.write('firebase_public_securetoken_keys', public_keys, expires_in: max_age.to_i)

    public_keys
  end

Но я получил ошибку в response = https.request(req).

Это сообщение об ошибке.

  1) PortalApi::V1::SessionController POST #sessionate with valid email returns a success response
     Failure/Error: response = https.request(req)

     NoMethodError:
       undefined method `encoding' for #<Hash:0x00007fc8de1b2700>

В моем коде нет метода encodingи я не мог видеть более подробную информацию о запросе http и проследить это.Вот почему я не смог выяснить, где в этом коде пропущена часть.

Но когда я отправляю запрос с curl https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com в моей консоли, API успешно возвращает мне открытые ключи.

Я хочу знать, где используется метод encoding и как это исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...