Laravel总是在PUT上返回302

时间:2018-06-06 09:11:29

标签: php laravel laravel-5.6

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

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

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

1 个答案:

答案 0 :(得分:1)

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