У меня есть приложение Angular, которое использует API, который я построил в Laravel, и я использую jwt-auth для управления токенами и сателлитер на внешнем интерфейсе для отправки токена с каждым запросом.
Моя живая среда (как для внешнего интерфейса, так и для API — которая будет перемещена на другой сервер после завершения работы приложения) на данный момент состоит из 2 экземпляров AWS EC2, работающих под управлением nginx с балансировщиком нагрузки. Оба сервера имеют одинаковый секретный ключ jwt.
Тем не менее, и в настоящее время я не могу обработать какой-либо шаблон, я случайно получаю 400 «token_invalid» ошибок, возвращаемых из моего API. Это не один конкретный маршрут API-интерфейса, а также не при каждой загрузке приложения. Когда я получаю ошибку 400, например, от моей конечной точки / клиентов, другие запросы возвращают 200. В следующий раз все вернется 200-х годов. Время после этого я могу получить 200 для / клиентов, но 400 ошибка для / пользователей.
Может ли это быть проблемой для меня с использованием балансировщика нагрузки? Секретный ключ jwt, как я уже сказал, одинаков на обоих серверах, так как весь код находится в GIT.
Я не использую промежуточное ПО jwt.refresh.
Еще одна вещь, которую стоит упомянуть, это то, что я никогда не получаю 400 ошибок при локальном запуске приложения через Homestead, только в производстве.
РЕДАКТИРОВАТЬ — кажется, что выход из системы (который очищает мой пользовательский объект (только основные сведения) и токен из локального хранилища, очистка моего кэша и последующий вход в систему чаще всего вызывает ошибку — это полезно?
Ниже приведен пример одного из моих вызовов API.
App.js
.service('ClientsService', function($http, $q, __env) {
this.index = function () {
var deferred = $q.defer();
$http.get(__env.apiUrl + '/clients')
.then(function successCallback(response) {
console.log(response.data);
deferred.resolve(response.data);
},
function errorCallback(response) {
console.log(response);
});
return deferred.promise;
}
})
ClientsController.js
.controller('ClientsController', function(ClientsService, $stateParams, $mdDialog, $mdToast) {
var vm = this;
ClientsService.index().then(function(clients) {
console.log('ClientsCtrl init');
vm.clients = clients.data;
});
// other controller code
})
Я действительно изо всех сил пытаюсь отладить это, поэтому любая помощь будет высоко ценится. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Задача ещё не решена.
Других решений пока нет …