Laravel 始终在 PUT 上返回 302

Laravel always returning 302 on PUT

我创建了一个 Laravel REST API。我的路线是使用 Route::apiResource() 自动生成的。 身份验证是使用 Passport 设置的,并且按预期工作。

现在我尝试使用我在控制器中附加到 storeupdatedelete 的中间件来实现管理员角色:

$this->middleware('admin-only', ['only' => ['store', 'update', 'delete']]);

如果用户不是管理员,我希望我的应用程序以 403 Insufficient permissions 响应。 对于 GET 它按预期工作,但对于 PUT 请求 Laravel 总是返回一个带有 302 Found.

的响应

AdminOnly 中间件

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);
    }
}

我通过在 Symfony\Component\HttpFoundation\RedirectResponse class 的构造函数中抛出异常(感谢@jedrzej.kurylo)并检查 laravels 错误日志中生成的堆栈跟踪(storage/logs/laravel.log). AdminOnly 中间件从未被调用,因为我忘记在请求中包含 id(/person 而不是 /person/{id})。这导致我的默认路由触发并重定向到应用程序库。