Laravel App выполняет два запроса, но второй нежелательный - PullRequest
0 голосов
/ 06 ноября 2018

Я обнаружил, что мое приложение Laravel (5.7) имеет странное поведение в некоторых случаях, когда оно выполняет два запроса отправки формы. На прошлой неделе все работало нормально.

Например: есть регистрационная форма. Когда пользователь хочет зарегистрироваться и отправить форму, он не проходит проверку, потому что введенный адрес электронной почты уже существует (чего не было до отправки формы). Взгляд в мою базу данных показывает, что пользователь был создан и вошел в систему. Таким образом, кажется, что форма каким-то образом выполняет два запроса.

Такое поведение наблюдается в нескольких формах по всему приложению, но не во всех. Это приводит к очень плохим действиям (приведенное выше, электронные письма отправляются дважды, изображения загружаются дважды и т. Д. И т. Д.).

Одной из возможных проблем может быть новая промежуточная программа, где я получаю доступ к текущему запросу и выполняю над ним некоторые действия:

class CookiebannerMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        $cookie_name = config('cookiebanner.cookie_key');
        $cookie_value = config('cookiebanner.cookie_value');
        $cookie_lifetime = config('cookiebanner.cookie_lifetime');

        $response = $next($request);

        if(!$request->hasCookie($cookie_name)){
            $response->cookie($cookie_name, $cookie_value, $cookie_lifetime);
            return $response;
        }

        return $next($request);
    }
}

Или есть другие возможности, которые могут вызвать такие проблемы?


Обновление

Проблема была в моем CookiebannerMiddleware. Проблема решена с помощью следующего решения:

class CookiebannerMiddleware
{
    public function handle(Request $request, Closure $next)
    {

        $cookie_name = config('cookiebanner.cookie_key');
        $cookie_value = config('cookiebanner.cookie_value');
        $cookie_lifetime = config('cookiebanner.cookie_lifetime');

        if(!$request->hasCookie($cookie_name)){
            return $next($request)->withCookie($cookie_name, $cookie_value, $cookie_lifetime);
        }

        return $next($request);
    }
}

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

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

Это может помочь в следующих ситуациях: Как запретить пользователям отправлять форму дважды

0 голосов
/ 06 ноября 2018

Старайтесь не звонить $next($request) дважды:

class CookiebannerMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        $cookie_name = config('cookiebanner.cookie_key');
        $cookie_value = config('cookiebanner.cookie_value');
        $cookie_lifetime = config('cookiebanner.cookie_lifetime');

        $response = $next($request);

        if(!$request->hasCookie($cookie_name)){
            $response->cookie($cookie_name, $cookie_value, $cookie_lifetime);
        }

        return $response;
    }
}
0 голосов
/ 06 ноября 2018

вы звоните дважды

$response = $next($request);

Вы должны сделать просто

    $response = $next($request);
    if(!$request->hasCookie($cookie_name)){
        $response->cookie($cookie_name, $cookie_value, $cookie_lifetime);
    }
    return $response;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...