Используя Laravel (5.4) + Passport (4.0), я пытаюсь реализовать oAuth-авторизацию для моего API. Получение токена не проблема, но как только я получаю доступ к нужному ресурсу по адресу Http: //somedomain.tld/api/user Меня как-то бросают в форму входа в сеть. Мой запрос содержит все необходимые заголовки как:
[{"key":"Authorization","value":"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImYxODk3ZmVhODIyOGQ0ZGY5MzU0ODI3NThiZTdlMmU0NTVjN2NkMzExMjc5OTdhMzU3NTQ3ZDQ5NzhhYTVmNjdjMTc5NmVlNTVjZGE4OTIyIn0.eyJhdWQiOiIxIiwianRpIjoiZjE4OTdmZWE4MjI4ZDRkZjkzNTQ4Mjc1OGJlN2UyZTQ1NWM3Y2QzMTEyNzk5N2EzNTc1NDdkNDk3OGFhNWY2N2MxNzk2ZWU1NWNkYTg5MjIiLCJpYXQiOjE1MDQxMTAzNzMsIm5iZiI6MTUwNDExMDM3MywiZXhwIjoxNTA1NDA2MzczLCJzdWIiOiIiLCJzY29wZXMiOltdfQ.WadULiSlQBJtG2Ixag8kGyI82UdXxHBGRWVJEb6ro4HGKPMpDl6-SRkp0EPV8ZJN2fZpv43g-bkJc-xVqPPHgx42QmDacOWeBcEb4kT5lYR6H540F_VmVUkB7ZRxNeEhX3cXysNmwRxrdbEvks3ml5S6pT1SSh2iDvYVk3xeAFhXv6GNBuy_3IOxaRwa9svXH7fR8n1YoJub8dnJM9xoGgXaxGFUoddjYMJNDjE7WYFHKePYES4ovp74OnPngJp62864kQ-8MEZmMaPPYmRX9SmSei-9VmWrdo5c9MyDBIDNgZpFF34bfA843LzSqgz1qDf26msjJX28tbP70fmNa1k5vt2OSYWVIB-G3eH280357VZbcbFmL34SqoAUOaWNjrLGPajBeVtqQO1sLW0y_662-b5ei3X4aZgDv09cfmll5IvkH1qsPYoB3ieBVkI8Fpet6T0p2-0iQjW9tClhGATlBMpEI67FIVBOFxw37YBmJSuj76XCd4MV0KVizWtLKpQZrYw64Kr9ncRMVf2fEsdUMZ6XahPBioTsC_CEkf9EgSBjKM-6l6P5C0yM51IbbUpjsjTZcfpzavuSDyOkrg2B_oSU9u_a2oX_K2NQyERxvsmJgkmV5FWol84GaNgPQZHOSekwdI52EobMAMFBapgjWVqjvhLagazWFsK9crI","description":""},{"key":"Content-Type","value":"application/json","description":""}]
[{"key":"Accept-Encoding","value":"application/json","description":""}]
[{"key":"Accept-Encoding","value":"application/json","description":""}]
мой маршруты / api.php читает
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:api');
но почему-то меня продолжают посылать в веб-форму входа.
Кто-нибудь, кто может объяснить мне? Я уже разместил более подробный вопрос со всем исходным кодом здесь.
Используйте эти заголовки при запросе через AJAX, jQuery обрабатывает это автоматически для вас, но для других платформ это нужно сделать вручную.
X-Requested-With: XMLHttpRequest
Laravel проверяет, отправили ли вы запрос Ajax или нет. Вы можете отправить эту информацию заголовка в ваш API, чтобы получить ответ JSON и без перенаправления:
Accept : application/json
Другой способ — написать промежуточное программное обеспечение, в котором вы устанавливаете заголовок, прежде чем он будет передан маршрутам:
public function handle(Request $request, Closure $next)
{
$request->server->set('HTTP_ACCEPT', 'application/json');
$request->headers = new HeaderBag($request->server->getHeaders());
return $next($request);
}