2013-07-30 72 views
2

我正在處理基於身份驗證的應用程序,其中用戶必須登錄才能訪問網站的某些路由。我還沒有找到關於如何完成這個任務的文檔,所以我就如何解決這個問題開展了一個想法。觸發阻止執行默認代碼的事件

這是我的職責知道如果用戶登錄或不:

App.filterAuth = function(navigateTo) { 
    navigateTo = typeof navigateTo !== 'undefined' ? navigateTo : '#'; 

    if (App.logged == false) { 
     App.vent.trigger('navigate', navigateTo); 
    } 
}; 

我的想法是,當用戶登錄套App.logged = true。然後,當我的路由器試圖執行一個具體的路由器時,我可以撥打App.filterAuth()。這實際上工作,並做一些調試,我看到一切都被觸發糾正。

問題?例如,我在受保護的路線上執行此操作,爲用戶加載圖像的源。當執行App.filterAuth()時,我發現它試圖導航到#,但此訂閱源視圖的執行未停止,並且與我的#路由關聯的視圖也未觸發。

有關如何改進此功能使其正常工作的任何想法?

在此先感謝!

+0

你的意思是這個url只會在沒有任何路由的情況下導航到'example.com /#'?你是否使用'event.preventDefault()'來阻止任何傳播? – dbf

+0

@dbf:謝謝!不,我沒有使用'event.preventDefault()',因爲我不知道我的功能在哪裏。任何建議? – udexter

+1

爲什麼不在你現有的路由器上設置'App.logged'或者設置路由時創建一個單獨的'Backbone.Router'並實例化它? – fbynite

回答

0

這可能不是一個答案直接的問題,但有一個骨幹插件,它可以幫助你和你盡力去做:https://github.com/boazsender/backbone.routefilter

您可以指定其他方法,這將是前觸發/路由之後代碼被處理。如果你以前回調從返回false,路由器代碼不會被評估:https://github.com/boazsender/backbone.routefilter#returning-false-from-within-a-before-filter

所以,你可以過濾器之前創建,它可以檢查,如果路線應該是安全的。如果它是安全的並且用戶未通過身份驗證,那麼您只需返回false並且不使用路由器代碼。

相關問題