我创建了一个Laravel REST API。我的路线是Route::apiResource()
自动生成的。
使用Passport设置身份验证,并按预期工作。
现在,我尝试使用我在控制器中附加到store
,update
和delete
的中间件实施管理员角色:
$this->middleware('admin-only', ['only' => ['store', 'update', 'delete']]);
如果用户不是管理员,我希望我的应用程序以403 Insufficient permissions
回复。
对于GET
,它按预期工作,但对于PUT请求,Laravel始终返回带有302 Found
的响应。
AdminOnly Middleware
namespace App\Http\Middleware;
use Illuminate\Http\Response;
use Closure;
use Illuminate\Support\Facades\Auth;
class AdminOnly {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next) {
$user = Auth::user();
if (!$user->admin) {
return Response::create('Insufficient permissions', 403);
}
return $next($request);
}
}
答案 0 :(得分:1)
我通过在Symfony\Component\HttpFoundation\RedirectResponse
类的构造函数中抛出异常(感谢@ jedrzej.kurylo)并在laravels错误日志(storage/logs/laravel.log
)中检查生成的堆栈跟踪来找到我的错误。
从未调用AdminOnly中间件,因为我忘记在请求中包含id(/person
而不是/person/{id}
)。这导致我的默认路由触发并重定向到应用程序库。