Добрый день! Изучаю связку backbone+jquerymobile, на сервере использую django rest framework. Возникла следующая проблема:
1.
[код без комментариев] Когда я отправляю на сервер связку логин/пароль в ответ от сервера получаю токен в формате
{ token: "mytoken"}. Я могу его просмотреть выполнив
console.log(response.token)
2. Далее мне нужно этот токен сохранить в localstorage, чтобы потом передать в хедер (с пом. переопределенного backbone.sync)
3.
[код с комментариями] Я добавил в модель localstorage и во вью присваиваю в переменную access_token. Теперь когда я отправляю мои логин/пароль, токен не возвращается а
console.log(response.token) возвращает
undefined. Проблема не в новом методе backbone.sync, потому, что если токен передавать явно во вью, то все работает как нужно.
Что я делаю не так? Кто может объяснить почему после добавления localstorage я не получаю токен. Или как еще можно передавать в хедер полученный токен?
Моя модель:
var User = Backbone.Model.extend({
defaults: {
username: "",
password: ""
},
url: appConfig.baseURL + "api-token-auth/",
//localStorage: new Store('srt')
});
Кусок вью:
user.save({}, {
success: function(model, response) {
if (typeof response.token === "undefined") {
console.log('Token is undefined');
} else {
console.log('Token is exists');
//localStorage.setItem('access_token', response.token);
window.workspace.navigate('#', { trigger: true});
return true;
}},
error: function(model, response) {
var error = JSON.parse(response.responseText)
console.log('Error: ' + error.detail);
}
Переопределенный Backbone.sync:
Backbone._sync = Backbone.sync
Backbone.sync = function(method, model, options) {
options = $.extend({
crossDomain: true
, xhrFields: {
withCredentials: true
}
, beforeSend: function(xhr){
xhr.setRequestHeader('Authorization', 'Token ' + localStorage.getItem('access_token'));
}
}, options);
return Backbone._sync(method, model, options);
}