2016-09-18 5 views
3

Когда пользователь вводит имя пользователя и пароль на браузере и успешно вошли в систему.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 не требуется.

+0

Привет, вам все еще нужна помощь? Я столкнулся с одной и той же проблемой, но думаю, что я немного поработал над тем, как маршруты api.php должны использовать промежуточное ПО «auth: api». –

ответ

5

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

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

Заметки о Токен аутентификации и Laravel 5.3:

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

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

+0

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

1

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

, потребляя свой собственный апи добавить ниже линии в вашей конфигурации/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']); 
}); 
}); 

теперь в вашей конфигурации/авт.PHP изменить эти строки

'api' => [ 
    'driver' => 'passport', 
    'provider' => 'users', 
], 
0

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

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

Смежные вопросы