Зависание сервера при использовании парольных паролей и / или жадности - PullRequest
0 голосов
/ 17 мая 2018

Мы адаптируем веб-сайт laravel в SPA laravel, а в будущем - мобильное приложение, которое использует веб-приложение, поэтому нам нужна какая-то аутентификация API.Для этого мы используем Laravel Passport.

Я использую Laravel 5.5 и следую руководству по Документам, но когда я пытаюсь использовать новый логин с почтальоном, сервер зависает, HTTP-запросы никогда не обрабатываются,

После некоторой отладки я обнаружил, что он вылетает, когда я использую Guzzle для публикации в маршруте / oauth / token.Но когда я использую Почтальон для доступа к этому маршруту, у меня нет проблем.

Это мой код:

    public function login(Request $request){
    $http = new Client();

    var_dump(1);
    //die
    $response = $http->post('http://localhost:8000/oauth/token', [  //Con postman esta ruta funciona
            'form_params' => [
            'grant_type' => 'password',
            'client_id' => env('PASSWORD-CLIENT_ID',2),
            'client_secret' => env('PASSWORD-CLIENT_SECRET',2),
            'username' => $request->username, //parece usar correo, no nombre de usuario
            'password' => $request->password,
            'scope' => '*',
        ],
    ]);

    var_dump(2);
    //die;
    return json_decode((string) $response->getBody(), true);
}

Это проблема с Guzzle, или с Oauth / Passport?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

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

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

Источник: http://php.net/manual/en/features.commandline.webserver.php

При выполнении вызовов к себе поток блокируется в ожидании собственного ответа.Решение состоит в том, чтобы либо разделить предоставляющее приложение и потребляющее приложение на их собственный экземпляр, либо запустить его на многопоточном веб-сервере, таком как Apache или nginx.

0 голосов
/ 25 мая 2018

То же самое случилось со мной, если я подал заявку через CLI.То, что я сделал, я изменил свою разработку на hometead или xampp virtualhost, и это сработало.

...