質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

2回答

1401閲覧

DISCORDのAPIのOAuth2認証でユーザーIDを取得する際にエラーが発生する

lyzmfeqpxs54

総合スコア237

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2022/12/08 09:43

編集2022/12/08 09:44

前提

いつもお世話になっております。
RailsでWebアプリを作成しており、その中で
Discord APIのOAuth2認証を用いて、ユーザーをサーバーに追加したいのですが、ユーザーIDを得るためのトークンをAPI側から受け取る段階でエラーが発生しております。

他のAPIを叩いたときの結果は正しく返ってくることから、クライアントID、シークレットIDなどのパラメータは間違っていないものと想定されます。

■ 参考サイト(DISCORD API公式)
https://discord.com/developers/docs/topics/oauth2#authorization-code-grant-redirect-url-example

実現したいこと

正しいレスポンスを得る(ユーザーIDを得るためのトークンの取得)

発生している問題・エラーメッセージ

#<Net::HTTPBadRequest 400 Bad Request readbody=true>

該当のソースコード

ruby

1 2https://discordapp.com/api/oauth2/authorize?client_id=xxxxxxxxxxxx&redirect_uri=http://XX.XXX.XX.XX/&response_type=code&scope=guilds.join 3 4# 上記ページアクセスすることでユーザー認証ページへ進めることができ 5# 認証に成功すると「http://XX.XXX.XX.XX?code=」の形でcodeを取得するところまでできています。 6# その後下記のようにPOSTしているのですが400エラーが発生します 7 8require 'uri' 9require 'net/http' 10require 'discordrb' 11require "json" 12 13uri = URI.parse("https://discordapp.com/api/v6/oauth2/token") 14http = Net::HTTP.new(uri.host, uri.port) 15http.use_ssl = uri.scheme === "https" 16params = {client_id: "xxxxxxxxxxx", 17 client_secret: "yyyyyyyyyy", 18 grant_type: "authorization_code", 19 code: 受け取ったcode, 20 redirect_uri: "http://XX.XXX.XX.XX/", 21 scope: "guilds.join"} 22headers = {"Content-Type" => "Content-Type:application/x-www-form-urlencoded"} 23response = http.post(uri.path, params.to_json, headers) 24 25# responseが → #<Net::HTTPBadRequest 400 Bad Request readbody=true> 26 27# 正しくは下記のようなレスポンスが返ってくると思われます 28{ 29 "access_token": "xxxxxx", 30 "expires_in": 604800, 31 "refresh_token": "", 32 "scope": "guilds.join", 33 "token_type": "Bearer" 34} 35

間違っている箇所をご教示ただけますと幸いです。
以上、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

api v6は部分的に廃止されている可能性があるので、
APIのURLを

https://discord.com/api/v10/oauth2/token

に差し替えてみてください。
また、Oauth2でtokenを取得する際、Scopeは不要だと思われます。

投稿2023/01/10 19:35

start

総合スコア101

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

https://developer.mozilla.org/ja/docs/Web/HTTP/Status/400

自分はRailsユーザーじゃないので確定はできません。
400だと可能性としてはURLのエンコードの問題かなと。


参考記事

http status code 400(Bad Request)が返信された時のチェックポイント | サン・エム・システム株式会社

RubyでHTTPリクエストを行う5つの方法

投稿2022/12/18 06:17

pecop

総合スコア409

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問