2015-05-22 3 views
1

Я создаю приложение в angularjs. В моем бэкэнд используются токены для управления сеансами. Маркер отправляется по каждому запросу в заголовках, а ответ содержит заголовок с новым значением токена, который я должен обновить.Непоследовательные локальные значения хранилища во взглядах angularjs

Я использую localStorage, чтобы сохранить значение токена. Проблема Я сталкиваюсь состоит в следующем:

Когда я ввожу маршрут /пользователей к примеру, я прошу пользователей, получить маркер в заголовке и обновить его локально на LocalStorage. Затем я иду на /продукты, например, я запрашиваю продукты, получаю еще один токен и обновляю его локально на localStorage. Когда я возвращаюсь к /пользователей, браузер или angularjs или Ui-маршрутизатор, я не знаю, кто это делает, получает вид из кэша, и проблема заключается в том, что LocalStorage также имеет кешированные значения, которые имеют старое значение токена, что является недопустимым, и любой запрос оттуда на бэкэнд не будет аутентифицироваться.

У любого есть какие-либо улики в получении этого ?. Я хочу, чтобы мой localStorage был согласован по просмотрам, даже если они кэшированы, я не хочу, чтобы мой localStorage был кэширован.

Буду признателен за помощь !.

UPDATE

Это, как мне удается LocalStorage из Идент службы.

auth.saveToken = function(token) { 
    $window.localStorage['my-token'] = token; 
}; 

auth.getToken = function() { 
    return $window.localStorage['my-token']; 
}; 

auth.removeToken = function() { 
    $window.localStorage.removeItem('my-token'); 
}; 
+1

Вы уверены, что вы не портя ключи/домен/префикс, используемый для вашего LocalStorage? Я не могу поверить, что localStorage.get ('sameKey') возвращает «кэшированное устаревшее значение» - ваша проблема должна быть где-то в другом месте. Может быть, поместить некоторый код ... вы используете угловое локальное хранилище (https://github.com/grevory/angular-local-storage)? – Reto

+0

Просто обновил вопрос с помощью кода с моей службы * auth *. –

+0

Я просто попытался с угловым локальным хранилищем вместо $ window. У меня такая же проблема. –

ответ

0

Я думаю, что я понял, что проблема была. В моих пользователей службы я устанавливал атрибут с именем «все», как это:

users.all = Restangular.all('users').getList(); 

Поскольку это не функция, при использовании users.all Я обратившееся обещание вернулось в первый раз с Restangular.all ('пользователи') GetList()..

Именно поэтому ответ, казалось, был «кэширован». Это была моя вина.

Решение должно было сделать пользователей.все функция, как это:

users.all = function() { 
    return Restangular.all('users').getList(); 
}; 
1

отключить HTTP кэширования уровня вы можете либо

  • настроить конфигурацию заголовка кэширования, сервер рассылает так, что он не позволяет браузеру кэшировать ответ - что-то вроде response.header('Expires', '-1');
  • добавить параметры запроса, который всегда меняется на запрос вы отправить на сервер (например domain.com/api/something?timestamp=12341234)
+0

У меня нет контроля над бэкэнд на данный момент, я попробую отправить timestamp в строку запроса, я дам вам знать, исправляет ли это это. благодаря –

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