【问题标题】:Laravel HTTP Client Bad Request on Discord API Access Token ExchangeDiscord API 访问令牌交换上的 Laravel HTTP 客户端错误请求
【发布时间】: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 的一个问题,并且从我收集到的信息中以非标准方式发出请求。

标签: laravel discord guzzle


【解决方案1】:

致任何寻找答案的人...

“无效授权”错误是由于 Discord API 和非标准请求的问题。我无法让 Laravel HTTP 类请求用于交换访问令牌。相反,我在 Laravel 中使用了原生 php cURL。

关于接收'400 bad request'的问题,这是由于使用了不正确的函数withOptions()而不是asJson()->withHeaders()。谢谢@Zachary Craig!

但是,由于上述问题,我最终无法使用它。

如果有其他人找到更好的解决方案,请告诉我:)!

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2011-01-19
    • 1970-01-01
    • 2012-03-26
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多