Процесс php перестает отвечать на запросы при вызове метода HTTP POST с использованием GuzzleHttp - PullRequest
1 голос
/ 11 июня 2019

Я использую HTTP-клиент guzzle для выдачи токена доступа на основе предоставления пароля после успешного входа пользователя. Я использую паспортный пакет для oauth, и я выполнил все настройки, которые включает в себя созданный клиент Password Grant. В моем контроллере входа я переопределяю метод sendLoginResponse черты AuthenticatesUsers, чтобы выдать токен доступа при успешной аутентификации по электронной почте / паролю

public function sendLoginResponse(Request $request)
{

    try {
        Log::debug("Auth attempt sucessful, obtaining access_token for user :: ".$request->email);

        $client = new Client();

        $token_response = $client->post(config('app.url').'/oauth/token', [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => config('auth.password_grant.client.id'),
                'client_secret' => config('auth.password_grant.client.secret'),
                'username' => $request->email,
                'password' => $request->password,
                'scope' => '*',
            ],
        ]);

        if($token_response->getStatusCode()!=200) {
            Log:error("Login failed to generate Access Token");
            throw new InvalidCredentialsException();
        }
        $request->session()->regenerate();
        $this->clearLoginAttempts($request);
        $data = json_decode((string) $token_response->getBody(), true);
        Cookie::queue('refresh_token',$data->refresh_token,config('auth.tokens.refresh.expire.days')*1440);

        Log::debug("Adding Bearer token to Authorization header");
        return response()->view('dashboard', [
            'expires_in' => $data->expires_in
        ], 200)->header('Authorization', $data->token_type.' '.$data->access_token);            
    } catch(Exception $e){
        Log::error('Error :: '.$e->getMessage());
        throw $e;
    }
}

Весь процесс PHP перестает отвечать на запросы, когда я делаю этот пост-запрос, и ни в одном из журналов нет ошибок. Именно на этой линии

$token_response = $client->post($token_url, .......

Я запустил это в сеансе отладки; и URL, идентификатор клиента и секрет генерируются правильно через свойства конфигурации; единственное исключение, которое я мог видеть, это FileNoFoundException, который возникает, когда он находит какой-либо ключ кеша для входа в дроссель, и все это происходит задолго до того, как сделан этот вызов, и приложение переходит к аутентификации пользователя.

Когда я делаю этот самый запрос с теми же параметрами через Почтальона или через artisan tinker, я могу получить ответ с данными access_token, refresh_token и expires_in.

1 Ответ

0 голосов
/ 12 июня 2019

Пара часов с «Hit And Trial» действительно сэкономит вам 10 минут на прохождение «Документации».

Оказывается, мне действительно не нужно делать всю эту тяжелую работу эта ссылка показывает, как мы можем добавить промежуточное программное обеспечение \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class, к web в app/http/Kernel.php, которое заботится о создании ApiToken для сторонние приложения, такие как React JS, которые я использовал бы для использования моего собственного API.

Хотя это решило цель написания всего этого кода, я до сих пор не уверен, что стало причиной того, что процесс не отвечал на запрос access_token из кода php.

...