如果有人在未經身份驗證時嘗試擊中任何其他路由,我該如何重定向到登錄頁面?在AngularJS中有沒有「最好的」方法?重定向所有路由,如果未經過身份驗證,則登錄
似乎是一個常見的問題,但我似乎無法找到一種方法來做到這一點。預先感謝您的幫助。
如果有人在未經身份驗證時嘗試擊中任何其他路由,我該如何重定向到登錄頁面?在AngularJS中有沒有「最好的」方法?重定向所有路由,如果未經過身份驗證,則登錄
似乎是一個常見的問題,但我似乎無法找到一種方法來做到這一點。預先感謝您的幫助。
這樣做的最好方法是設置一個'$ routeChangeStart'偵聽器來檢查'authProvider'服務函數,以驗證是否有用戶登錄。在我們的'app.js'或單獨的文件:
angular.module('myApp')
.run(['$rootScope', '$location', 'authProvider', function ($rootScope, $location, authProvider) {
$rootScope.$on('$routeChangeStart', function (event) {
if (!authProvider.isLoggedIn()) {
console.log('DENY : Redirecting to Login');
event.preventDefault();
$location.path('/login');
}
else {
console.log('ALLOW');
}
});
}])
然後我們 'authProvider' 服務:
angular.module('myApp')
.factory('authProvider', function() {
var user;
return {
setUser : function(aUser){
user = aUser;
},
isLoggedIn : function(){
return(user)? user : false;
}
};
});
這種溶液從堆棧溢出的答案here創建。
謝謝@MohammadAwwaad
Thanks @ Rorschach120。那就是訣竅。唯一讓我困惑的是preventDefault()。你甚至需要這個工作嗎?重定向阻止了默認動作和重定向,所以看起來你不喜歡,但我無法看到某些東西。 – sturoid 2014-10-01 17:15:51
+1因爲它重定向到未經授權的用戶的登錄頁面,但如何讓用戶通過服務器端代碼,如PHP登錄?如何在不需要登錄的情況下訪問任何頁面註冊頁面? – 2015-03-02 09:21:35
http://stackoverflow.com/questions/20969835/angularjs-login-and-authentication-in-each-route-and-controller?rq=1 – 2016-07-26 10:07:03
我這樣做不同的方式,現在,用Node.js的&快速&的passport
模塊,但在此之前,當我使用PHP,我與幾個角模塊做到了。我在我的<html>
標記上有一個外部模塊,其中ng-app
,然後ng-controller
s在某些標記處,如<body>
&某些<div>
s。在其中一個ng-controller
s,我有一個身份驗證功能,然後我有一個ng-if
登錄,註銷等。如果用戶沒有登錄,我隱藏當前頁面和ng-include
d適當的頁面。否則,我在當前頁面上輸入ng-include
。
這可能不是最好的解決方案,但我不想使用第三方模塊。如果你感到困惑或有任何問題(我知道我很困惑),只是問。
我也做了這樣的事情。在整個事物之外用主控制器中的變量控制可見模板。然後我意識到這正是'ng-view'的作用,所以我試圖用它來代替。 – tscizzle 2016-06-24 04:20:05
創建'$ routeChangeStart'或'$ stateChangeStart'偵聽器(用於ui路由器),檢查auth狀態,如果未通過身份驗證,則重定向至登錄。 – 2014-10-01 16:18:19
感謝@martoncsukas的編輯。 – sturoid 2014-10-01 16:46:48