我正在处理登录页面,成功后,它会重定向到主页。默认情况下,我显示登录页面此代码:
app.run(function($rootScope, $location) {
$rootScope.$on('$routeChangeSuccess', function() {
$location.url("/login");
});
});
然后,在验证用户/从后端传递详细信息后,我将用户带到主页:
$scope.login = function() {
if ($scope.username === 'admin' && $scope.password === 'pass') {
console.log('successful')
$rootScope.$on('$routeChangeSuccess', function() {
$location.url("/home")
});
$location.url("/blah");
} else {
$scope.loginError = "Invalid username/password combination";
console.log('Login failed..')
};
};
如果我删除 if
语句的 else
部分之前的第二个$location.url
,重定向似乎不起作用。但是,它没有使用该网址(/blah
),它会转到home
。但如果删除 url blah
,则重定向逻辑不起作用。
似乎不明白为什么我必须使用两个$location.url()
.如果有人可以帮助我了解这个重定向系统的工作原理,我会很感激?
这可能不是最佳实践,我愿意接受有关如何改进的建议,这是 Plunker 示例
这是走上了一条错误的道路 IMO...
显然,您需要锁定任何资源服务器端,因为客户端始终可以在简单的调试器中"更改"......但我想你已经知道了...
替代路由解决方案(如 https://github.com/dotJEM/angular-routing 或 https://github.com/angular-ui/ui-router IMO )为您提供了一些更好的处理方法,但让我们评估一些方法......
一个是:http://plnkr.co/edit/ZUKB1v?p=preview 虽然这需要您在所有路由上解析用户......所以。。:(...另一个是:http://plnkr.co/edit/iM9cA1?p=preview 哪个可能会好一点......
最后,人们似乎经常做的是提供http拦截器,当服务器返回"未经授权"错误代码时,它会重定向到登录页面。但这似乎是一种比您准备好的更先进的方法。