Я делаю запрос ajax с axios на laravelcontroller, я хочу использовать middleware, чтобы проверить, был ли request сделан с ajax, но проблема в том, что когда я делаю ajax request,, middleware всегда выбрасывает false.
я звоню вот так
axios.post('/api/contact/send', {
...
data : data
}).then((response) => {
Do somethings
}).catch(err => {
Do somethings
})
мои маршруты api
Route::namespace('Home')->middleware('IsAjaxRequest')->domain(env('HOST'))->group(function(){
....
Route::post('contact/send','ContactController@postContact');
});
промежуточное ПО IsAjaxRequest
if (!$request->ajax()) {
abort(403, 'Unauthorized action.');
}
return $next($request);
и контроллер
<?php
namespace App\Http\Controllers\Home;
use Illuminate\Http\Request;
use App\Events\Home\ContactMail;
use App\Http\Controllers\Controller;
use App\Http\Requests\ContactRequest;
class ContactController extends Controller
{
//
public function postContact(ContactRequest $request)
{
$data = $request->all();
event(new ContactMail($request->all()));
return response()->json();
}
}
если я выну middleware, все будет работать нормально, проблема в том, что когда я проверяю $request->ajax(), который возвращает false, я проверял его вне middleware непосредственно в controlelr, но результат тот же, что не так? зачем возвращать false, если звонок был сделан через ajax?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Axios не отправляет заголовок X-Requested-With, который ищет Laravel, чтобы определить, является ли запрос AJAX.
Если вы спросите меня, вам вообще не следует использовать или полагаться на этот заголовок, но (я полагаю) для целей простой миграции от jQuery (который включает заголовок) основной шаблон Laravel bootstrap.js имеет код:
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
что гарантирует, что все запросы, сделанные с помощью Axios, получат этот заголовок, однако, если вы не используете этот файл, вам нужно запустить эту строку в своем собственном скрипте.
Вы зарегистрировали промежуточное ПО? Обновите вопрос, указав полный код промежуточного программного обеспечения.