2014-09-08 1 views
0

로그인 및 사용자 인증이 필요한 간단한 앱을 구현하려고합니다.인증되지 않은 경우 bacbkone 라우터 리디렉션

var App = new Marionette.Application({}); 

App.addRegions({ 
    headerRegion : "#nav-region", 
    mainRegion : "#main-region" 
}); 

App.navigate = function(route, options){ 
    options || (options = {}); 
    Backbone.history.navigate(route, options); 
}; 

App.getCurrentRoute = function(){ 
    return Backbone.history.fragment 
}; 

App.on("start", function(){ 
    if(Backbone.history){ 
     Backbone.history.start(); 
    } 
}); 

그리고 라우터는 모듈에 정의되어, 예를 들면 : https://github.com/davidsulc/marionette-gentle-introduction

는 일반적으로 나는 새로운 응용 프로그램을 설정 한 : 나는 백본과 꼭두각시에 새로운 오전, 나는이 튜토리얼의 예를 따르도록 시도하고있다 :

App.module("ContentManagementApp", function(ContentManagementApp, App, Backbone, Marionette, $, _){ 
    ContentManagementApp.Router = Marionette.AppRouter.extend({ 
     appRoutes : { 
      "contentmanagement/:dsid(/:dspageclassid)": "showContentMananagement", 
     } 
    }); 

    var API = { 
     showContentMananagement : function(dsid, dspageclassid){ 
      // If not set, set to frontpage 
      ContentManagementApp.Show.Controller.showDSPage(dsid, dspageclassid); 
      App.execute("set:active:header", "contentmanagement"); 
     }, 
    }; 

    App.on("contentmanagement:show", function(dsid, dspageclassid){ 
     App.navigate("contentmanagement/" + dsid + "/" + dspageclassid); 
     API.showContentMananagement(dsid, dspageclassid); 
    }); 

    App.addInitializer(function(){ 
     new ContentManagementApp.Router({ 
     controller : API 
     }); 
    }); 
}); 

내가 할 때 응용 프로그램이 시작 사용자가 로그인 한 경우 테스트하고 로그인 페이지로 리디렉션 싶습니다하지만 App.addInitializer 전에 호출처럼 보인다. 각 모듈에서 점검을해야한다는 뜻입니까, 아니면 어떻게 든 이해할 수 있습니까?

답변

2

사용자가 로그인했는지 여부는 어떻게 결정합니까?

인증되지 않은 사용자로 인해 실패 할 수있는 API 호출 인 경우 일반적으로 HTTP 오류 코드 403을 반환합니다. 일반적으로 글로벌 jQuery ajax.error() 처리기를 사용하여이 작업을 수행하고 403 (금지 된) 내 일반적인 API 호출 (모델 가져 오기 등)에 대한, 그리고 있다면, 나는 로그인 URL로 리디렉션합니다.

쿠키 또는 유사품을 확인하려면 Backbone.history.start()으로 전화하기 전에해야합니다. 사용자가 기록 된 경우에만 앱을 시작하십시오. :)

+0

쿠키에 액세스 토큰을 저장하려고 했으므로 과 같은 내용이면 (Backbone.history) { var t = utils.readCookie ("cookie"); if (t == null) { this.trigger ("login : show"); } else { Backbone.history.start(); } ... – user3821383

+0

예, app.start()를 호출하기 전에 쿠키에서 확인하십시오. – CharlieBrown

0

난 그냥 내 애플 리케이션에 설정 - 백엔드에서 사용자가 로그인 할 때 쿠키를 만들거나 로그 아웃 때 파괴하십시오. 그런 다음 jquery-cookie-rails 보석을 사용하여 $ .cookie ('cookie_name')으로 쿠키에 액세스하고 거기에 없으면 로그인 경로로 라우팅합니다.

다른 컨트롤러 작업을 수행 할 때 백엔드에 서명되었는지 확인하고 적절히 라우팅합니다. 나는 여분의 보호 :).