Laravel 5.3 API

Когда пользователь вводит имя пользователя и пароль в браузере и успешно вошел в систему.

Мне нравится делать некоторые запросы API после того, как пользователь вошел в систему.

Laravel 5.3 предоставляет api.php в папке маршрутов.

в api.php я включил:

Route::group(['middleware' => ['auth']], function () {
    Route::get('/test', function (Request $request) {
         return response()->json(['name' => 'test']);
    });
});

При запросе domain.com/api/test в браузере по какой-то причине выполняется перенаправление на /home?

Токен API не нужен.


person I'll-Be-Back    schedule 18.09.2016    source источник
comment
Привет, тебе все еще нужна помощь? Я столкнулся с той же проблемой, но думаю, что я немного продвинулся в том, как маршруты в api.php должны использовать промежуточное ПО auth: api.   -  person Mere Development    schedule 22.09.2016


Ответы (4)


Если вы указываете маршруты в api.php, вам нужно будет использовать промежуточное ПО auth: api. Итак, используя ваш пример, это будет:

Route::group(['middleware' => ['auth:api']], function () {
    Route::get('/test', function (Request $request) {
         return response()->json(['name' => 'test']);
    });
});

Примечания об аутентификации токена и Laravel 5.3:

  • Если вы установили систему аутентификации laravel по умолчанию, вам также нужно будет добавить столбец для api_token в пользовательскую таблицу. Если вы используете сеялки БД, вы можете добавить что-то вроде: $table->char('api_token', 60)->nullable(); в сеялку таблиц пользователей. В качестве альтернативы просто добавьте столбец вручную и заполните этот столбец случайным ключом из 60 символов.
  • При запросе вы можете добавить api_token в качестве параметра URL / Querystring, например: domain.com/api/test?api_token=[your 60 char key]. Вы также можете отправить ключ в виде заголовка (при использовании Postman или аналогичного), например: Header: Authorization, Value : Bearer [your 60 char key].
  • Я приказываю получить полезную ошибку, если токен неправильный, а не просто перенаправить для входа в систему, а также отправить следующий заголовок со всеми запросами: Заголовок: Accept, Значение: application/json. Это позволяет проверке expectsJson() в функции unauthenticated() внутри App/Exceptions/Handler.php работать правильно.

Мне было трудно найти четкие документы от Laravel об использовании аутентификации токена с 5.3, я думаю, это потому, что есть диск для использования Passport, и он поддерживает токены по-другому. Вот статья, которая, вероятно, больше всего помогла заставить его работать: https://gistlog.co/JacobBennett/090369fbab0b31130b51

person Mere Development    schedule 29.09.2016
comment
Спасибо. Пара комментариев: $table->char('api_token', 60)->nullable(); идет в миграцию, а не сидер. С другой стороны, я должен создать этот токен сам, потому что регистрация новых пользователей с помощью формы не заполняет меня. Что-то еще: передача api_token через URL-адрес для меня не сработает (в Laravel 5.4). Но он работает как параметр заголовка с помощью Postman. - person mayid; 13.04.2017

сначала установите паспорт, как указано здесь установка паспорта laravel

при использовании вашего собственного API добавьте строку ниже в свой config / app.php в разделе промежуточного программного обеспечения

'web' => [
// Other middleware...
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],

теперь измени свой маршрут на

Route::group(['middleware' => ['auth:api']], function () {
Route::get('/test', function (Request $request) {
     return response()->json(['name' => 'test']);
});
});

теперь в вашем config / auth.php измените эти строки

 'api' => [
    'driver' => 'passport',
    'provider' => 'users',
],
person sandeep goel    schedule 29.11.2016

Причина, по которой вас перенаправляют обратно на home, заключается в том, что промежуточное ПО auth проверяет, сохранен ли сеанс пользователя в вашем браузере, но поскольку промежуточное ПО api не использует сеансы (см. App \ http \ kernel.php ) ваш запрос рассматривается unauthenticated

Если вы хотите использовать простые API-интерфейсы, использующие сеансы, не стесняйтесь добавлять их в свои web маршруты и не забудьте защитить их, сгруппировав их внутри auth промежуточного программного обеспечения.

person Paul Santos    schedule 01.12.2017

Стандартным поведением в Laravel 5.5 является делегирование обработки исключений аутентификации app / Handler :: unauthenticated () в коде приложения вашего проекта. Вы найдете там код, который перенаправляет на страницу входа, и вы можете переопределить его или выполнить там дальнейшие тесты и контекстуализацию. В предыдущих версиях Laravel, среди которых я считаю 5.3, эта обработка исключений выполнялась глубоко в библиотеке Laravel в папке vendor.

person quinny    schedule 28.04.2018