полимер-печенье создает дубликат Джанго CSRF печенья
нечетный вопрос, который я только что столкнулся. Кажется, что Django генерирует 2 файла cookie, когда я перехожу на эту страницу. Два файла cookie не имеют одного и того же токена, поэтому это приводит к сбою моего сообщения, потому что он проверяет неправильный файл cookie.
Кто-нибудь знает, почему это может произойти?
Ничего особенного в представлении:
class ListingDetailView(TemplateView):
template_name = "bidding/listing_detail.html"
def get(self, request, *args, **kwargs):
c = self.get_context_data(**kwargs)
c['listing'] = get_object_or_404(Listing, id=kwargs['id'])
return self.render_to_response(c)
... хотя мне кажется, что код нарушитель может быть в одном из моих пользовательских компонентов (когда я это скрыть, дополнительные куки не генерируется):
<polymer-element name="bts-place-bid" attributes="href">
<template>
<polymer-cookie id="csrfcookie" name="csrftoken"></polymer-cookie>
<core-ajax
id="bidxhr"
method="post"
body=""
url="{{ href }}"
headers='{"X-CSRFToken": "{{ csrftoken }}"}'
on-core-response="{{ handleResponse }}">
</core-ajax>
<core-style ref="bts-place-bid"></core-style>
<paper-button on-click="{{ toggleDialog }}">Place Bid</paper-button>
<paper-action-dialog heading="Place Bid"
transition="core-transition-center"
id="bidDialog">
<core-style ref="bts-bid-dialog"></core-style>
<bts-field>
<label for="id_amount">Bid Amount in Rands</label>
<input type="number" name="amount" id="id_amount" value="{{ amount }}">
</bts-field>
<bts-field vertical layout>
<label for="id_proposal">Short note or proposal for this bid</label>
<textarea rows="4" id="id_proposal" name="proposal" value="{{ proposal }}"></textarea>
</bts-field>
<paper-button dismissive><core-icon icon="cancel"></core-icon> Cancel</paper-button>
<paper-button on-click="{{ placeBid }}" affirmative><core-icon icon="note-add"></core-icon> Place Bid!</paper-button>
</paper-action-dialog>
<paper-toast id="toastMsg" text=""></paper-toast>
</template>
<script>
Polymer({
amount: 0,
proposal: "",
bidPayload: "",
ready: function() {
this.csrftoken = this.$.csrfcookie.value;
},
toggleDialog: function(ev, detail, sender) {
this.$.bidDialog.toggle();
},
placeBid: function(ev, detail, sender) {
this.$.toastMsg.text = "Placing bid, please wait..."
this.$.toastMsg.show();
this.$.bidxhr.body = "amount=" + this.amount + "&proposal=" + this.proposal;
this.$.bidxhr.go();
},
handleResponse: function(ev, detail, sender) {
this.$.toastMsg.text = "Bid placed, refreshing...";
this.$.toastMsg.show();
// Auto refresh the page...
window.location = window.location;
}
});
</script>
</polymer-element>
Я подозреваю, что проблема может быть с <polymer-cookie>
, я буду копаться это источник немного.
Можно предположить, что вы уже пытались очистить свой кеш и загружать только одну страницу? Вы можете опубликовать свой шаблон и просмотреть код? – dylrei
@dylrei добавил некоторые дополнительные бит. Да очищенный кеш, и это происходит только на страницах, где я использую настраиваемый компонент, упомянутый выше. Я теперь подозреваю, что проблема может быть связана с –
Andre
Используйте другое имя для вашего полимера-печенья. Вот где вы устанавливаете второй файл cookie под названием «csrftoken» – dylrei