У меня есть SPA с использованием VUE и LARAVEL 5.8. Я настроил API_TOKEN, связанный с вошедшим в систему пользователем.Все отлично работает сразу после входа в систему.Я получаю API_TOKEN, сохраняю его в var и отправляю вместе с запросом Axios.В Laravel у меня есть промежуточное программное обеспечение, которое заботится о токене и сравнивает его с одной установкой вошедшего в систему пользователя.
проблема возникает, когда истекает сеанс.Потому что я все еще могу перемещаться по частным страницам и делать запросы API для сохранения и удаления контента.Это возможно, я думаю, потому что у меня все еще есть тот же API_TOKEN, сохраненный в var, и промежуточное программное обеспечение, очевидно, не получает истечения сеанса.
Так что я хочу получать API_TOKEN каждый раз, когда я делаюAjax, запросите по истечении сеанса, я не получу токен и, следовательно, не смогу завершить запрос.
Это мои настройки.
web.php
, где у меня есть единственный php-маршрут, который указывает на singlePageController
:
Auth::routes();
Route::get('/{any}', 'SinglePageController@index')->where('any', '.*');
Затем в singlePageController
я возвращаю вид:
class SinglePageController extends Controller
{
public function index() {
return view('app', ['loggedUser' => auth()->user()]);
}
}
Тогда у меня есть api.php
, где у меня есть маршруты API.Как вы видите в конце, у меня есть промежуточное программное обеспечение, чтобы сделать его приватным.Просто для примера, это тот, который я использую для обновления контента:
Route::put('event/update/{slug}', 'EventController@update')->middleware('auth:api');
Затем соответствующий контроллер этого маршрута API:
public function update(Request $request, $slug)
{
$event = Event::where('slug', $slug)->first();
$event->title = $request->input('title');
return new EventResource($event);
}
И в конце этоРесурс, который я использую, чтобы определить, что и как будут отображаться данные API:
public function toArray($request)
{
// return parent::toArray($request);
return [
'id' => $this->id,
'title' => $this->title,
'slug' => $this->slug,
'curator' => $this->curator,
'featured_image' => $this->featured_image,
'body' => $this->body,
'date' => $this->date
];
}
Так что это выше, у меня есть поток.Затем, когда я выполняю вызов axios для обновления содержимого, я делаю что-то вроде:
axios({
method: 'PUT',
url: '/api/event/update/' + this.$route.params.slug + '?api_token=' + this.isLogged.apiToken,
data: dataToSave,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
})
.then((response) => {
this.getNotification('Success: The Event has been saved');
})
.catch((error) => {
this.getNotification('Error: Impossible saving the event');
console.log(error);
})
Знаете ли вы, как это сделать?или есть ли лучший способ сделать это?