** решено ** жрет не отправляет тип гранта в паспорт Laravel - PullRequest
1 голос
/ 30 сентября 2019

Я немного озадачен своим кодом, я запускаю Laravel 6 с Guzzle Http Client версии 6.3.3.

Я решил использовать черту, которую я использую на своем API-шлюзе для связи с микро-сервисамивместо раздувания базы кода с повторяющимся кодом.

Черта

    public function performRequest($method, $requestUrl, $formParams = [], $headers =[])
    {
        $core = env('CORE_URI');
        $client = new Client([
            'base_uri' => $core,
        ]);

        $response = $client->request($method, $requestUrl, ['form_params' => $formParams, 'headers' => $headers]);

        return $response->getBody()->getContents();
    }

Код ошибки (Не отправка пароля типа предоставления OAuth, даже если он работает с почтальоном)

$core_client_id = env('CORE_CLIENT_ID');
        $core_client_secret = env('CORE_CLIENT_SECRET');
        $username = $request->input('username');
        $password = $request->input('password');

        return $this->performRequest('POST','/oauth/token', [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => $core_client_id,
                'client_secret' => $core_client_secret,
                'username' => $username,
                'password' => $password,
                'scope' => '',
            ],
            'headers' => [
                'content-type' => 'multipart/form-data',
            ]
        ]);

Возвращаемое исключение - 400 Неверный запрос «Неподдерживаемый тип гранта»

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

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

Рабочий код

public function attemptLogin(Request $request)
    {
        $core_client_id = env('CORE_CLIENT_ID');
        $core_client_secret = env('CORE_CLIENT_SECRET');
        $username = $request->input('username');
        $password = $request->input('password');

        $data = array(
            'grant_type' => 'password',
            'client_id' => $core_client_id,
            'client_secret' => $core_client_secret,
            'username' => $username,
            'password' => $password,
            'scope' => '',
        );
        return $this->performRequest('POST','/oauth/token', $data);
    }
0 голосов
/ 30 сентября 2019

Я немного искал в интернете и обнаружил, что спецификация OAuth2 для заголовка Content-Type является «application / x-www-form-urlencoded». Чтобы решить вашу проблему, просто удалите 'content-type' => 'multipart/form-data' из 'headers'

Вот полный код

$core_client_id = env('CORE_CLIENT_ID');
    $core_client_secret = env('CORE_CLIENT_SECRET');
    $username = $request->input('username');
    $password = $request->input('password');

    return $this->performRequest('POST','/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => $core_client_id,
            'client_secret' => $core_client_secret,
            'username' => $username,
            'password' => $password,
            'scope' => '',
        ],
    ]);
...