Laravel 始终在 PUT 上返回 302
Laravel always returning 302 on PUT
我创建了一个 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 中间件
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}
)。这导致我的默认路由触发并重定向到应用程序库。
我创建了一个 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 中间件
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}
)。这导致我的默认路由触发并重定向到应用程序库。