我在Angular.js中實現了一些簡單的客戶端身份驗證邏輯。涉及的頁面有:Angular.js:頁面閃爍身份驗證重定向
/account#/login (public)
/account (require login)
/account#/settings (require login)
當用戶沒有登錄並嘗試訪問要麼/account
或/account/#/settings
,應用程序應該重定向到登錄頁面。
我使用的UI路由器配置了以下路線:
$stateProvider
.state('overview', {
url: '/',
restricted: true
})
.state('settings', {
url: '/settings',
restricted: true
})
.state('login', {
url: '/login',
restricted: false
})
,並在網址的變化,我檢查即將到來的頁面是一個受限制的頁面,以及是否在當前用戶未登錄如果是這樣的重定向登錄。
app.run(function($rootScope, $location, $state, auth) {
$rootScope.$on('$stateChangeStart', function(event, next) {
if (next.restricted && !auth.isLoggedIn()) {
event.preventDefault();
$state.go('login');
}
});
});
auth
僅僅是檢查登錄狀態,並返回任一true
(登錄)或false
(未登錄)的服務。
我的問題是:
即使這(種)的作品,我看到試圖在不登錄訪問受限制的頁面時,頁面閃爍問題的頁面閃爍的限制頁面的內容。快速將我重定向到登錄頁面之前。
我在網上做了一些研究,有些人提到在定義我的狀態時,潛在的解決方案可能會使用resolve
,因爲除非解析成功,否則頁面將不會加載。但是,當我嘗試添加時
resolve: {
load: function(auth) {
return auth.isLoggedIn();
}
}
它沒有工作。我錯過了什麼?正在使用resolve
的方式去?
我發現閃爍的原因是因爲我的概述頁面處於靜態模板。將該模板的內容更改爲「
」解決了該問題。但感謝您的幫助! – melonccoli 2015-04-01 16:17:38