2014-09-23 3 views
0

Как справиться с тайм-аутом сеанса в виде марионетки на главной линии? Из-за таймаута сеанса мой вызов ajax терпит неудачу (метод извлечения возвращает сообщения об ошибках), и мне нужно перенаправить пользователя обратно на страницу входа.Как автоматически перенаправить на страницу входа в систему, когда срок действия сеанса истек в Backbone.js?

ответ

2

Один из способов сделать это - переопределить Backbone.sync и проверить возвращаемое значение в случае сбоя. Если это связано с тем, что сеанс завершен, перенаправление на страницу входа в систему, в противном случае обработать ошибку.

Здесь вы можете увидеть пример: https://github.com/davidsulc/marionette-serious-progression-app/blob/master/assets/js/entities/common.js#L107, где неавторизованный доступ обрабатывается иначе, чем «обычные» ошибки. Этот код из моего advanced book on Marionette.

+0

Спасибо за быстрый ответ. Где переопределить этот метод, я переопределяю всю мою модель из базовой модели. Нужно ли переопределять синхронизацию в моей базовой модели? – Sunny

+0

Лучший способ - переопределить его в 'BaseModel'. Затем сделайте свою модель наследованием от нее с помощью BaseeModel.extend ({... '. См. Например https://github.com/davidsulc/marionette-serious-progression-app/blob/30f923059d1d713f4974fb21b0a3206ee4fa90b3/assets/js/entities/ contact.js # L2 –

1

Например:

myModel.fetch({ 
    success: function(){ 
     //do something 
    }, 
    error: function (model, response, options) { 
     if(response.status == 401){ 
      window.location.href = '/login'; 
     } 
    } 
}); 
+0

Это хорошее решение. Но я ищу универсальное решение, в котором оно будет работать для всех моих моделей, коллекций и представлений. Спасибо за ответ. – Sunny

0

Родовое решением для вас может быть, чтобы использовать JQuery в ajaxSetup:

var redirectToLogin = function() 
{ 
    App.router.navigate('login', true); 
}; 

$.ajaxSetup(
{ 
    statusCode: { 
     401: redirectToLogin, 
     403: redirectToLogin 
    } 
}); 
Смежные вопросы