我想在AngularJS中實現基本的認證路由。我有一個擁有返回承諾的授權方法的模型。我希望路由等待,直到授權函數返回true或false才能繼續,一旦完成,它應該恢復路徑或將用戶重定向到登錄頁面。AngularJS路由與授權過程
我認爲本質上我需要停止路由,調用該方法,然後恢復或重定向到登錄。以下是我目前爲止的代碼,但我不確定如何完成暫停/恢復。有任何想法嗎?
return angular.module('d', ['ngCookies', 'ngRoute'])
.config(['$routeProvider', '$locationProvider', '$httpProvider',
function ($routeProvider, $locationProvider, $httpProvider) {
$routeProvider.when('/',
{
templateUrl: 'views/home.html',
controller: 'HomeCtrl'
});
$routeProvider.when('/login',
{
templateUrl: 'views/login.html',
controller: 'LoginCtrl'
});
$routeProvider.otherwise({ redirectTo: '/404' });
$locationProvider.html5Mode(true);
// handle unauthorized requests by redirecting to login page
$httpProvider.responseInterceptors.push(
['$location', '$q', function ($location, $q) {
function success(response) {
return response;
}
function error(response) {
if (response.status === 401) {
$location.path('/login');
return $q.reject(response);
}
else {
return $q.reject(response);
}
}
return function (promise) {
return promise.then(success, error);
}
}]);
}])
.run(['$rootScope', '$location', 'Auth', function ($rootScope, $location, Auth) {
$rootScope.$on("$routeChangeStart", function (event, next, current) {
$rootScope.error = null;
Auth.authorize().then(function(){
$location.path('/');
},function(){
$location.path('/login');
});
});
}]);
[$ routeProvider resolve] [1]是我感覺的正確方法。 [1]:http://stackoverflow.com/questions/18788586/angularjs-handle-routing-before-they-load – amcdnl
你能提供'authorize'方法請 – Merlin