Laravel - получение сведений о пользователе для метода, используемого как в веб-маршрутах, так и в маршрутах API

У меня есть проект в Laravel, где я использую один и тот же метод как для веб-маршрута, так и для API-маршрута. Так, например, у меня было бы следующее:

//routes/web.php 
Route::post("/import-results", "ImportController@doImport");

//routes/api.php
Route::post("/import-results/{auto}", "ImportController@doImport");

Таким образом, независимо от маршрута, функция doImport() будет вызываться в ImportContoller.

Контроллер импорта имеет такую ​​функцию (в функции есть проверка, но я убрал ее для простоты):

public function doImport($auto = null){
   $importData = new DataImport();
   $importData->type = $_POST['type'];
   $importData->data = $_POST['data'];
   $importData->user = Auth::user()->name;
   $importData->save();

   $data = [
      "success" => true,
      "message" => "Message Here!"
   ]

   if($auto){
      return json_encode($data);
   }else{
      return view('import-message', $data);
   }
}

Как видите, этот метод использует Auth::user()->name; для определения того, какой пользователь импортировал данные. Это нормально, если я вхожу в систему и использую обычный веб-маршрут, но как быть, если я использую API и использую базовую аутентификацию, где сеансы не создаются, и я не хочу, чтобы сеансы сохранялись, если вызываются маршруты API.

Как получить информацию о пользователе при вызове маршрутов API?

Также для веб-маршрутов я настроил свой логин, так как я использую ldap, но, по сути, логин происходит, выполняя $this->guard()->login($user, false); в классе с чертой AuthenticatesUsers.

Я мог бы сделать это и для своих маршрутов API, но создает ли это сеанс и как мне очистить этот сеанс после завершения запроса? Или есть лучший способ??


person SamBremner    schedule 04.12.2017    source источник
comment
вам не нужны сеансы для аутентификации .. есть аутентификация по токену, он все еще может использовать систему аутентификации   -  person lagbox    schedule 04.12.2017
comment
@lagbox я обновил свой пост, чтобы объяснить больше. Если я сделаю $this->guard()->login($user, false); для маршрута API, будет создан сеанс. Это нормально, но необходимо завершить сеанс в конце запроса. Я не/не хочу использовать аутентификацию по токену для API из-за невозможности реализации в системах, которые вызывают API. Он использует базовую HTTP-аутентификацию.   -  person SamBremner    schedule 04.12.2017
comment
который аутентификация уже может обрабатывать .... laravel.com/docs/5.3 /   -  person lagbox    schedule 04.12.2017
comment
Почему вам нужна и аутентификация API, и Web? Используйте только один здесь Web. Пхп будет работать?   -  person Niklesh Raut    schedule 04.12.2017


Ответы (1)


Чтобы сеанс работал как для отправки страницы, так и для API. Вам нужна работа в web.php

Сделать оба маршрута в web.php

   //Web.php
   Route::post("/import-results", "ImportController@doImport");

   Route::post("/api/import-results/{auto}", "ImportController@doImport");

api.php не имеет состояния, что означает, что в api.php нет сеанса. Он работает с токенами, такими как JWT.

person Niklesh Raut    schedule 04.12.2017
comment
Возможно, у меня есть фундаментальное непонимание того, как это должно работать, но я пытаюсь использовать ldap для авторизации пользователей с помощью формы входа и авторизации вызовов API с помощью базовой HTTP-аутентификации, но с использованием тех же методов, которые вызывают Auth::user( ); Это возможно? - person SamBremner; 05.12.2017