中间件未按预期工作 - Laravel
Middleware doesn't work as expected - Laravel
我想制作一个中间件来保护 laravel 5.2 应用程序中的管理路由。
user_type 不是我数据库中用户 table 中的字段,而是在单独的 table 中:
管理员的 user_type_id 是 4
我制作了这个中间件:
class AdminMiddleware
{
public function handle($request, Closure $next)
{
$authedUserID = Auth::id();
$user = User::query()
->leftjoin('users_user_types as uut', 'uut.user_id', '=', 'users.id')
->where('uut.user_id',"=","$authedUserID")
->get(['users.*',
'uut.user_type_id as userType'])->first();
if ($user['userType'] !=4)
{
return redirect('/home');
}
return $next($request);
}
}
并将其放入 kernel.php 中的 $routeMiddleware 数组中:
'admin' => \App\Http\Middleware\AdminMiddleware::class
这是我想应用我的中间件的管理路由之一:
Route::get('ptyadmin', 'AdminController@show')->middleware('admin');
问题是当我用管理员用户(user_type = 4)或普通用户(user_type = 1)去这条路线时在这两种情况下都重定向到 /home !!
为什么会发生这种情况,我该如何解决??
first
方法returns对象
if ($user->userType !=4)
也用select
代替get
->select(['users.*','uut.user_type_id as userType'])->first();
当我将 jwt.auth 中间件放入 routes.php 时它起作用了:
Route::get('ptyadmin', 'AdminController@show')
->middleware('jwt.auth')
->middleware('admin');
而不是将它放在 AdminController 中:
public function __construct(User $user, JWTAuth $jwtauth)
{
$this->middleware('jwt.auth', ['except' => []]);
}
我想制作一个中间件来保护 laravel 5.2 应用程序中的管理路由。
user_type 不是我数据库中用户 table 中的字段,而是在单独的 table 中:
管理员的 user_type_id 是 4 我制作了这个中间件:
class AdminMiddleware
{
public function handle($request, Closure $next)
{
$authedUserID = Auth::id();
$user = User::query()
->leftjoin('users_user_types as uut', 'uut.user_id', '=', 'users.id')
->where('uut.user_id',"=","$authedUserID")
->get(['users.*',
'uut.user_type_id as userType'])->first();
if ($user['userType'] !=4)
{
return redirect('/home');
}
return $next($request);
}
}
并将其放入 kernel.php 中的 $routeMiddleware 数组中:
'admin' => \App\Http\Middleware\AdminMiddleware::class
这是我想应用我的中间件的管理路由之一:
Route::get('ptyadmin', 'AdminController@show')->middleware('admin');
问题是当我用管理员用户(user_type = 4)或普通用户(user_type = 1)去这条路线时在这两种情况下都重定向到 /home !!
为什么会发生这种情况,我该如何解决??
first
方法returns对象
if ($user->userType !=4)
也用select
代替get
->select(['users.*','uut.user_type_id as userType'])->first();
当我将 jwt.auth 中间件放入 routes.php 时它起作用了:
Route::get('ptyadmin', 'AdminController@show')
->middleware('jwt.auth')
->middleware('admin');
而不是将它放在 AdminController 中:
public function __construct(User $user, JWTAuth $jwtauth)
{
$this->middleware('jwt.auth', ['except' => []]);
}