我正在添加一个中间件,用于检查数据库中的特定权限
中间件
public function handle($request, Closure $next)
{
$right = User_access_right::where('access_key','=','add')
->where('user_id','=',Auth::user()->id)
->first();
if(count($right) == 1)
{
if($right->access_value == 1)
{
return $next($request);
}
}
else
{
return redirect()->to('/home')->withErrors(['status' => 'You do not have privilege to do such task']);
}
}
现在在控制器中我添加了一些方法。
public function __construct()
{
$this->middleware('auth');
$this->middleware('hasAddPrivilege', ['only'=>['CreateCategory', 'CreateSubCategory']]);
}
在VerifyCsrfToken.php中,我添加了一些不检查令牌的路由
protected $except = [
'/category/create',
'/category/update',
'/category/sub_create',
'/category/move_category',
'/item/create',
'/item/update'
];
我的路线
Route::group(['middleware' => 'auth', 'prefix' => '/category'], function()
{
Route::get('/', 'CategoryController@Category');
Route::post('/create', 'CategoryController@CreateCategory');
Route::post('/update', 'CategoryController@UpdateCategory');
Route::post('/sub_create', 'CategoryController@CreateSubCategory');
Route::get('/other_category/{id}', 'CategoryController@getRestOfCategories');
Route::post('/move_category', 'CategoryController@MoveCategory');
Route::get('/getCategoryTree', 'CategoryController@getCategoryTree');
});
但我仍然收到此错误;
VerifyCsrfToken.php第156行中的ErrorException:尝试获取非对象的属性
答案 0 :(得分:1)
您的中间件有一个逻辑分支,根本不会返回任何内容。中间件需要返回响应,以便以前的中间件可以根据需要使用响应来执行操作。他们接受请求并返回回复。
VerifyCsrfToken
得到null
来自您的中间件的响应,因为根本没有返回任何内容。
在此之后的下一个中间件也可能无法正确返回响应并且正在返回,这将导致同样的问题。
if(count($right) == 1)
{
if($right->access_value == 1)
{
return $next($request);
}
// what about when $right->access_value != 1 ?
}