Я обнаружил, что мое приложение 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);
}
}