我想检查一个 http 服务以查看用户是否经过身份验证,以及它是否有权查看 AngularJS 1.2.0rc1 中的某个页面(控制器)。
我有这种情况:用户 A 想访问http://www.example.com/content。现在,当他或她未经过身份验证时,不应访问此内容。如果用户未通过身份验证,则应将其重定向到http://www.example.com/login。
现在我设法做到了,但我简要地看到了内容页面的呈现 html。我不想要这个。如何在不呈现内容页面的情况下重定向到登录页面?
我这样注册我的路线:
$routeProvider.when('/login', route.resolve('Login', false))
$routeProvider.when('/content', route.resolve('Content', true))
现在我已经尝试过了:
$rootScope.$on('$routeChangeStart', function (event, route) {
if (route.requiresLogin) {
$http.get('/api/user/loggedin/').then(function (response) {
if (response !== 'true') {
$location.path('/login');
}
});
}
});
哪个有效,但我仍然看到另一个页面(内容)的html内容在闪烁。
我在这里读到过,您还可以在路由解析时尝试更改解析功能:
var resolve = function (baseName, requiresLogin) {
var routeDef = {};
var dependencies = [routeConfig.getControllersDirectory() + baseName + 'Controller.js'];
routeDef.templateUrl = routeConfig.getViewsDirectory() + baseName.toLowerCase() + '.html';
routeDef.controller = baseName + 'Controller';
routeDef.requiresLogin = requiresLogin;
routeDef.resolve = {
load: ['$q', '$rootScope', '$http', '$location', function ($q, $rootScope, $http, $location) {
console.log(requiresLogin);
if (requiresLogin) {
return checkLoggedIn($q, $rootScope, $http, $location);
} else {
return resolveDependencies($q, $rootScope, dependencies);
}
}]
};
return routeDef;
}
但是这里的页面也简单地显示。
希望你能帮助我。