在Laravel应用程序中,我使用auth
中间件来确保只有经过身份验证的用户才能到达特定的路由。
因此,在我的routes/web.php
中,我有这样的东西:
Route::group(['middleware' => ['auth', 'user.required.fields']], function () {
}
如您所见,我添加了一个额外的中间件:user.required.fields
看起来像这样
<?php
namespace App\Http\Middleware;
use Closure;
class CheckUserRequiredFields
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(auth()->user()->has_filled_required_fields){
return $next($request);
}
else{
return redirect()->route('new-user');
}
}
}
有问题的属性如下:
/**
* If the user has filled in their role, department and location, allow full access to the intranet
*
* @return void
*/
public function getHasFilledRequiredFieldsAttribute()
{
if ($this->role && $this->department && $this->location) {
return true;
} else {
return false;
}
}
但是,这会导致无限循环。
auth
中间件中是否有某些东西会引起这种情况?几乎就像中间件反复调用自己一样。
该代码将正确地重定向到route('new-user
)`,然后反复点击该路由。
答案 0 :(得分:0)
我认为您在此组中定义了route('new-user')
:
Route::group(['middleware' => ['auth', 'user.required.fields']], function () {
//
}
因此,它将由中间件检查,该中间件将一次又一次返回相同的路由,从而导致上述循环。
可能的解决方案是从该grop删除路由,并且也不要使用CheckUserRequiredFields
中间件对其进行保护。