我有一個Auth管道。Aurelia管道未按預期工作
run(navigationInstruction, next) {
if (navigationInstruction.getAllInstructions().some(i => i.config.auth)) {
var isLoggedIn = this.auth.isAuthenticated()
if (!isLoggedIn) {
return next.cancel(new Redirect('login'));
}
}
return next();
}
正如你可以看到,如果未經驗證的用戶試圖訪問他們重定向到登錄頁面的身份驗證頁面它會檢查。這工作。現在我想要實現的是相反的,如果用戶登錄並試圖訪問我想他們重定向到儀表板
run(navigationInstruction, next) {
var isLoggedIn = this.auth.isAuthenticated()
if (navigationInstruction.getAllInstructions().some(i => i.config.auth)) {
if (!isLoggedIn) {
return next.cancel(new Redirect('login'));
}
} else {
if (isLoggedIn) {
return next.cancel(new Redirect('dashboard'));
}
}
return next();
}
非認證頁面現在,這也適用然而它引起的錯誤我相信。如果我嘗試訪問非授權頁面,並且我沒有授權,它會重定向到登錄頁面。所以更具體的例子是我登錄頁面,我沒有通過身份驗證,我試圖去註冊頁面,我只是重定向到登錄頁面。現在我認爲由於某種原因,i.config.auth
認爲它是真實的,但我做了一些調試,我意識到return next()
實際上碰到它加載註冊模板,但它然後重定向回到登錄頁面。
我也注意到,僅僅是移動if語句相同的錯誤發生的外var isLoggedIn
功能:
run(navigationInstruction, next) {
var isLoggedIn = this.auth.isAuthenticated()
if (navigationInstruction.getAllInstructions().some(i => i.config.auth)) {
if (!isLoggedIn) {
return next.cancel(new Redirect('login'));
}
}
return next();
}
UPDATE
這裏是我的路線
config.map ([
{ route: '', redirect: 'login' },
{ route: 'login', moduleId: 'components/login/login', title: 'Login', name: 'login' },
{ route: 'register', moduleId: 'components/register/register', title: 'Register', name: 'register' },
{ route: 'dashboard', moduleId: 'components/dashboard/dashboard', title: 'Dashboard', auth: true, name: 'dashboard' },
]);
您可能在這裏遇到了範圍問題。您是否嘗試過使用「let」而不是「var」作爲isLoggedIn變量(在if語句之內還是之外)?這可以幫助防止當前值泄漏到下一個呼叫中。 –
@FredKleuver我曾嘗試將它切換到讓和我不認爲這是一個範圍問題,因爲'isLoggedIn'總是我所期望的即使在if語句內 – Rodrigo
你說的真的不應該發生,如果'auth '註冊'路線的財產確實是虛假的或未定義的。所以,如果我正確理解你的問題:你沒有登錄,你從'登錄'導航到'註冊'。首先,'run'被命中,'return next();'被調用。其次,'run'被再次擊中並返回next.cancel(新的重定向('login'));'被調用。它是否正確? –