У меня проблема, когда быстрый щелчок пользователя приводит к сбою промежуточного программного обеспечения.Мне трудно поймать ошибку в журнале, поэтому см. Общее описание ниже.
Сценарий
- Пользователь создан.
- Пользователь переходит на /profile
- Промежуточное программное обеспечение hasAcceptedGDPR перенаправляет на маршрут / acceptGDPRBeforeContinuing
- В представлении acceptGDPRBeforeContinuing пользователь нажимает ссылку на route / acceptGDPR, которая устанавливает флаг db, указывающий, что пользователь действительно принял условия gdpr.
- Пользователь наконец перенаправлен в / profile
Это работает нормально, если вы нажимаете медленно.Нажатие принимает быстрее, чем ~ 5 секунд после загрузки страницы, снова запускает промежуточное ПО!Это указывает на то, что отсутствует какая-то асинхронная вещь или отсутствует какой-то кеш?По какой-то причине второй щелчок всегда работает.
Для моего друга, у которого на блестящем быстром Mac все работает нормально, но для моего медленного компьютера это проблема .. есть идеи, что здесь тестировать?
Контроллер:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\UploadRequest;
use App\Pack;
use App\User;
use Auth;
class ProfileController extends Controller
{
public function __construct()
{
$this->middleware([
'auth'
]);
$this->middleware([
'hasAcceptedGDPR'
])->except([
'acceptGDPRBeforeContinuing', 'acceptGDPR'
]);
}
public function index() {
return view('profile');
}
public function acceptGDPRBeforeContinuing() {
return view('acceptGDPRBeforeContinuing');
}
public function acceptGDPR() {
$user = Auth::user();
$user->has_accepted_gdpr = true;
$user->save();
return redirect('/profile');
}
}
Промежуточное ПО:
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class HasAcceptedGDPR
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(!Auth::user()->has_accepted_gdpr) {
return redirect('/acceptGDPRBeforeContinuing');
}
return $next($request);
}
}
Маршруты:
Route::get('/profile', 'ProfileController@index');
Route::get('/acceptGDPRBeforeContinuing', 'ProfileController@acceptGDPRBeforeContinuing');
Route::get('/acceptGDPR', 'ProfileController@acceptGDPR');
Вид:
<h3>Please accept our privacy police before continuing</h3>
<a href="{{url('/acceptGDPR')}}">I accept it.</a>