👻

Ruby on Rails のhttpリクエストで、unsupported grant type エラーが出た時の解決策

2022/12/17に公開

Ruby on Rails のhttpリクエストで、unsupported grant type エラーが出た時の解決策

タイトルの通り、Ruby on Rails で net::http を用いたhttpリクエストの際、レスポンスとして「unsupported grant type」のエラーがでた際の備忘録になります。

結論

下記2点の確認をしましょう。

1. リクエストボディで、正しい grant_type が指定されているか?

指定を忘れることはないと思いますが、念の為。

2. コンテンツタイプとボディのオブジェクトの組み合わせは正しいか?

net::httpでリクエストを送信する際、コンテンツタイプに応じてリクエストボディのオブジェクトを変更する必要があります。
コンテンツタイプを指定しない場合、自動でapplication/x-www-form-urlencoded 扱いになるようですので、注意しましょう。

コンテンツタイプが application/x-www-form-urlencoded の場合は set_from_dataメソッドHash(ハッシュ) を送信する。

# application/x-www-form-urlencoded の場合
request['Content-type'] = 'application/x-www-form-urlencoded'
request.set_form_data(
      { 
        'key' => value,
        'key' => value,
        ...
      }
    )

コンテンツタイプが application/json の場合は bodyメソッドJSON(ジェーソン) を送信する。

# application/json の場合
request['Content-type'] = 'application/json'
request.body = {
  'key': value,
  'key': value,
  ...
}.to_json

です。

書いた経緯

zoom apiを用いた開発時、リクエストボディで grant type を正しく指定しているにもかかわらず、

{"reason":"unsupported grant type","error":"unsupported_grant_type"}

のエラーレスポンスが返ってきて、ドンピシャの記事がなくて沼ったので、忘備録として残します。

自分の場合は、Content-type を application/x-www-form-urlencoded に指定しているのに、Hashではなく JSONをbodyで送っていたのが原因でした。

解決のお役に立てたようでしたら、イイネを押していただけますとモチベアップにつながります。
よろしくお願いします。

Discussion