У меня есть проект в 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, но создает ли это сеанс и как мне очистить этот сеанс после завершения запроса? Или есть лучший способ??
$this->guard()->login($user, false);
для маршрута API, будет создан сеанс. Это нормально, но необходимо завершить сеанс в конце запроса. Я не/не хочу использовать аутентификацию по токену для API из-за невозможности реализации в системах, которые вызывают API. Он использует базовую HTTP-аутентификацию. - person SamBremner   schedule 04.12.2017