在我的项目中有两个级别的中间件。
一个UserAuthentication,另一个是PermissionsMiddleWare。
假设有一条路线:
Route::group(['middleware' => ['myauth', 'revalidate'], 'prefix' => '/user'], function () {
Route::group(['middleware' => 'permissions:Campaigns'], function () {
Route::resource('/dashboard', 'UserController@dashboard');
}
}
现在在UserAuthenticationMiddleware中:
<?php
public function handle($request, Closure $next)
{
if ($request->session()->has('user_id')) {
$user_id = $request->session()->get('user_id');
} else {
return redirect('loginUser');
}
$response = $next($request);
return $response->header('Cache-Control', 'nocache, no-store, max-age=0, must-revalidate')
->header('Pragma', 'no-cache')
->header('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT');
return $next($request);
}
在PermissionsMiddleware中:
<?php
public function handle(Request $request, Closure $next, $permission_name = "")
{
//login to get permission decision
if (!$decision) {
// **Old process** of response
// return redirect('user/accessRejected')->with('message', 'Request rejected');
// **New process** of response
return ['accessRejected' => true, 'message' => 'Request rejected'];
}
$response = $next($request);
return $response->header('Cache-Control', 'nocache, no-store, max-age=0, must-revalidate')
->header('Pragma', 'no-cache')
->header('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT');
return $next($request);
}
旧流程工作正常,权限中间件正在限制并重定向到页面。
现在,因为这是项目的API方面,所以我无法重定向到另一个页面,而是需要以JSON或数组格式进行响应。
在遵循新的回复流程时,我收到此错误:
FatalErrorException in UserAuthenticationMiddleware.php line (this below code line):
-> return $response->header('Cache-Control','nocache, no-store, max-age=0, must-revalidate')
->header('Pragma','no-cache')
->header('Expires','Fri, 01 Jan 1990 00:00:00 GMT');
Call to a member function header() on array
请详细说明我的代码中的错误。
答案 0 :(得分:1)
我们可以使用返回响应数据而不是仅返回数据。像这样:
return response(['accessRejected'=> true, 'message'=>'Request rejected reason:' . $this->checkPermission]);
}
然后我们可以正确得到答案。