Промежуточное программное обеспечение для авторизации Laravel с Ajax-вызовом возвращает 403

#php #laravel #laravel-8 #laravel-middleware

#php #laravel #laravel-8 #laravel-промежуточное программное обеспечение

Вопрос:

При доступе к моему маршруту из запроса Ajax я всегда получаю ошибку 403. Он даже не входит в функцию политики.

 Route::group(['middleware' => 'auth'], function () {
    Route::group(['middleware' => 'can:owns,mymodel'], function () {
        Route::get('myroute/{mymodel}/get', 'MyController@get')
            ->name('mymodel.get');
    });
});
 

Если вместо того, чтобы присоединять промежуточное программное обеспечение в моем web.php (маршрут) как и в приведенном выше файле, я делаю это из своей функции контроллера следующим образом:

 public function get(MyModel $model)
{
    $this->authorizeForUser(auth()->user(), 'owns', $model);
    // ...
}
 

Тогда авторизация работает так, как ожидалось. Я почти уверен, что мне чего-то не хватает в том, как работает Gate против промежуточного программного обеспечения, но тот же маршрут работает нормально, если не запрашивается в Ajax.

Комментарии:

1. ваш параметр в сигнатуре вашего метода должен иметь то же имя, что и ваш параметр маршрута ….. MyModel $mymodel , предполагая, что вы хотите использовать привязку модели маршрута здесь

2. @lagbox Вы правы! Спасибо, это работает.