6

我正在处理登录页面,成功后,它会重定向到主页。默认情况下,我显示登录页面此代码:

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..')
    };
  };

如果我删除语句部分$location.url之前的第二个,重定向似乎不起作用。但是,它没有使用该 url ( ),而是转到. 但如果 url被删除,则重定向逻辑不起作用。elseif/blahhomeblah

我似乎无法理解为什么我必须使用两个$location.url(). 如果有人可以帮助我了解此重定向系统的工作原理,我将不胜感激?

这可能不是最佳实践,我愿意接受有关如何改进这一点的建议,这里是Plunker 示例

4

1 回答 1

4

总而言之,IMO 走的是一条错误的道路……

显然,您需要锁定任何资源服务器端,因为客户端总是可以在一个简单的调试器中“更改”......但我想你已经知道......

替代路由解决方案,如https://github.com/dotJEM/angular-routinghttps://github.com/angular-ui/ui-router IMO 为您提供了一些更好的处理方法,但让我们评估一些方法。 .

一个是: http ://plnkr.co/edit/ZUKB1v?p=preview虽然这需要您在所有路由上解析用户...所以.. :(...另一个是:http://plnkr。 co/edit/iM9cA1?p=preview可能会更好一些...

最后,人们似乎经常做的是提供 http 拦截器,当服务器返回“未经授权”错误代码时重定向到登录页面。但这似乎是一种比您准备好的方法更先进的方法。

于 2013-11-07T13:49:13.183 回答