我有一个问题,快速点击的用户会导致中间件失败。我很难捕捉到日志中的错误,因此请参见下面的一般描述。
脚本
-
创建一个用户。
-
用户导航到/profile
-
中间件hasAcceptedGDPR在继续之前重定向到route/AcceptGDPr
-
在“接受gdpr”视图中,在继续之前,用户单击指向route/acceptGDPR的链接,该链接设置db标志,指示用户确实接受了gdpr条款。
-
用户最终被重定向到/profile
如果你慢慢点击,效果很好。页面加载后,点击accept(接受)的速度超过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>