【发布时间】:2021-01-03 23:23:41
【问题描述】:
我有一个 laravel 应用程序设置,并且我正在配置一个 Discord 身份验证系统。 我已发送并请求授权并收到了确认码。
当我尝试将代码交换为访问令牌时,我收到了 400 错误请求,但我不知道为什么。 我是 laravel 新手,似乎找不到任何可能有助于查明问题的错误。
授权后discord重定向的控制器函数
public function exchange(Request $request) {
//exchange discord code for access_token
$code = Request::get('code',false);
$params = array(
'grant_type' => 'authorization_code',
'client_id' => env('CLIENT_ID'),
'client_secret' => env('OAUTH2_CLIENT_SECRET'),
'redirect_uri' => Request::root().'/discord/return',
'scope' => 'identify guilds guilds.join',
'code' => $code
);
$access_token = Http::withOptions([
'debug' => true,
'headers' => [
'Accept' => 'application/json',
'Content-Type' => 'application/x-www-form-urlencoded'
],
'json' => $params
])->post('https://discordapp.com/api/oauth2/token');
dd($access_token);
return redirect()->route('return.discord',['token' => $access_token->access_token]);
}
我已经倾倒了 $params 并且所有数据都按原样提取。 Guzzle 转储:
[CONNECT] [FAILURE] severity: "2" message: "HTTP/1.1 400 Bad Request " message_code: "400" [MIME_TYPE_IS] message: "application/json" [FILE_SIZE_IS] message: "Content-Length: 26" bytes_max: "26" [PROGRESS] bytes_max: "26"
我知道 400 bad request 表示正在发送的数据存在问题,但我不知道我在做什么没有产生正确的结果。文档说明了我设置的所需内容类型,所以我真的在这里摸不着头脑。
任何帮助将不胜感激。
这里是 Discord API 文档: https://discord.com/developers/docs/topics/oauth2#authorization-code-grant
【问题讨论】:
-
您确定可以在选项中传递标题吗?我通常使用 withHeaders 方法
-
如果我这样做,
Http::asJson()->withHeaders([ 'Accept' => 'application/json', 'Content-Type' => 'application/x-www-form-urlencoded' ])->post('https://discordapp.com/api/oauth2/token', $params)->body();我会在正文中返回“无效授权”,这可能意味着这更接近您想要的? -
非常感谢您的评论,似乎就是这样。我之前使用了 withHeaders() 选项,并认为我可以将 withOptions() 与 Guzzle 一起使用。我认为它的作用是 asJson() 。遗憾的是,“无效授权”错误似乎是 Discord API 的一个问题,并且从我收集到的信息中以非标准方式发出请求。