我遇到快速点击用户导致中间件失败的问题。我很难在日志中捕获错误,因此请参阅下面的一般说明。
这很好用,如果你慢慢点击。页面加载后单击接受时间超过约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>