如何防止两个 Laravel 中间件创建无休止的重定向?
How to keep two Laravel middleware from creating endless redirects?
我有两个不是路由中间件的中间件。它们专门用于确保为登录用户准备好两件事。已签署付款和文件。
我的kernel.php:
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
'App\Http\Middleware\AuthenticateSigned',
'App\Http\Middleware\FeesOwed',
'App\Http\Middleware\DeniedAccess'
];
造成此问题的是 AuthenticateSigned 和 FeesOwed
第一个AuthenticateSigned:
public function handle($request, Closure $next)
{
if ($this->auth->guest())
{
if ($request->ajax()){
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
} else if(!$this->auth->user()->role->administrator){ // the users not an admin
if(!$this->auth->user()->agreement_id || $this->auth->user()->signed_current_membership_agmt == 0 ){
if ($request->ajax()){
return response('Unauthorized.', 401);
} else {
return redirect()->route('agreement');
}
}
return $next($request);
}
return $next($request);
}
然后我欠费:
public function handle($request, Closure $next)
{
$uri = $request->server()['REQUEST_URI'];
if($this->auth->user()
&& $this->auth->user()->role_id != 3
&& $this->auth->user()->unpaidFees() // Does the user have past due fees
&& $uri != '/profile/investment-fees' // view of form to pay fees
&& $uri != '/profile/charge-investment-fees' // post request to pay fees
&& $uri != '/profile/pay-payment'
&& $uri != '/logout'
//&& !$this->auth->user()->role->administrator // admins shouldn't be subject to this
){
\Session::flash('message','You must pay past due management fees before using the rest of the members platform.');
return redirect()->route('profile.investment-fees');
}
return $next($request);
}
我已经阅读了大量的 SO 帖子和 laracast,所有的注释要么是 "your missing a return $next($request);"
,要么是路由中间件。
一直使用这些中间件运行,因为有时候让用户知道他们需要签署新协议或支付费用很重要。
非常感谢任何帮助。
谢谢
当来宾用户尝试访问 /login
时,AuthenticateSigned
中间件会将其重定向到 /login
,从而导致无限重定向循环。
当请求的 URL 与您尝试重定向的目标相同时避免重定向。
我有两个不是路由中间件的中间件。它们专门用于确保为登录用户准备好两件事。已签署付款和文件。
我的kernel.php:
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
'App\Http\Middleware\AuthenticateSigned',
'App\Http\Middleware\FeesOwed',
'App\Http\Middleware\DeniedAccess'
];
造成此问题的是 AuthenticateSigned 和 FeesOwed
第一个AuthenticateSigned:
public function handle($request, Closure $next)
{
if ($this->auth->guest())
{
if ($request->ajax()){
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
} else if(!$this->auth->user()->role->administrator){ // the users not an admin
if(!$this->auth->user()->agreement_id || $this->auth->user()->signed_current_membership_agmt == 0 ){
if ($request->ajax()){
return response('Unauthorized.', 401);
} else {
return redirect()->route('agreement');
}
}
return $next($request);
}
return $next($request);
}
然后我欠费:
public function handle($request, Closure $next)
{
$uri = $request->server()['REQUEST_URI'];
if($this->auth->user()
&& $this->auth->user()->role_id != 3
&& $this->auth->user()->unpaidFees() // Does the user have past due fees
&& $uri != '/profile/investment-fees' // view of form to pay fees
&& $uri != '/profile/charge-investment-fees' // post request to pay fees
&& $uri != '/profile/pay-payment'
&& $uri != '/logout'
//&& !$this->auth->user()->role->administrator // admins shouldn't be subject to this
){
\Session::flash('message','You must pay past due management fees before using the rest of the members platform.');
return redirect()->route('profile.investment-fees');
}
return $next($request);
}
我已经阅读了大量的 SO 帖子和 laracast,所有的注释要么是 "your missing a return $next($request);"
,要么是路由中间件。
一直使用这些中间件运行,因为有时候让用户知道他们需要签署新协议或支付费用很重要。
非常感谢任何帮助。 谢谢
当来宾用户尝试访问 /login
时,AuthenticateSigned
中间件会将其重定向到 /login
,从而导致无限重定向循环。
当请求的 URL 与您尝试重定向的目标相同时避免重定向。