Я столкнулся с нечетной проблемой с сервисом ngCookies
. В основном, после получения ответа от моего /api/auth/login/
конечной точки, с заголовками:Обновление cookie от ответа, отложенного в будущем
Set-Cookie csrftoken=gxCld8gEga71MuQPQbjDujDBvR4HwPvu; expires=Sun, 28-Dec-2014 15:31:38 GMT; Max-Age=31449600; Path=/
$cookies['csrftoken']
обновляется после неопределенного периода времени. Этот факт был задокументирован в docs:
Only a simple Object is exposed and by adding or removing properties to/from this object, new cookies are created/deleted at the end of current $eval.
Зная, что я прибегал к использованию $timeout
, мы надеемся задержать оценку моего кода к после вышеупомянутая $eval
.
Законченное со следующим (CoffeeScript):
login =() ->
deferred = $q.defer()
$http.post('/api/accounts/login/', data)
.success((data) ->
args = arguments
$timeout(() ->
do_fancy_stuff()
deferred.resolve.apply(deferred, args)
)
return
).error(() ->
args = arguments
$timeout(() ->
deferred.reject.apply(deferred, args)
)
return
)
promise = deferred.promise
promise.success = promise.then
promise.error = promise.catch
promise
Но код выше по-прежнему страдает от проблемы. Куки обновляется значением от пути реакции после $timeout
пинков в.
После добавления console.log('cookies push', $browser.cookies().csrftoken, cookies.csrftoken);
here (после if
заявления). Я в конечном итоге с чем-то вроде этого:
Как вы можете видеть, маркеры были равны после 7 гравюр.
Маркировка yhQqT6KOfSKYCNB3Ag4sEPllMgkLrVj1
относится к предыдущей сессии. Я тестирую вход в приложение и не обновляю страницу. Setting X-CSRFToken
вызывается непосредственно в моей функции do_fancy_stuff()
(нет асинхронных вещей, только голый $cookies['csrftoken']
доступ).
Кроме того, использование $q
требуется обеспечить $http
-как перспективны в качестве возвращаемого значения (там не было бы, если $q
печенье работают нормально).
Я думаю, что испытываю подобную проблему. Любой прогресс в разрешении? –
@SethM., Я действительно сделал это так, чтобы мои представления 'login' вернули заголовок X-CSRFToken со значением токена. При этом в ответе на предстоящие запросы можно напрямую настроить заголовок '$ http' по умолчанию. Заметьте, что я утверждаю, что это взлом, а не решение. –