当前位置: 首页 > 知识库问答 >
问题:

AngularJS:使用angularjs保护路由取决于用户是否被授权?

苍元章
2023-03-14

我刚刚开始使用我正在开发的一个AngularJS应用程序,一切都很顺利,但我需要一种保护路由的方法,这样用户就不会被允许去那个路由,如果没有登录。我也理解服务方面保护的重要性,我会处理好的。

我发现了许多保护客户的方法,其中一种似乎使用了以下方法

$scope.$watch(
    function() {
        return $location.path();
    },
    function(newValue, oldValue) {
        if ($scope.loggedIn == false && newValue != '/login') {
            $location.path('/login');
        }
    }
);

我需要把这个放在哪里,在. run中的app.js

我发现的另一种方法是使用指令和程序

信息在这里http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app

我真的很有兴趣在任何人的帮助和反馈推荐的方式。

共有2个答案

贡和裕
2023-03-14

使用$routeProviderresolve属性的另一种方法

angular.config(["$routeProvider",
function($routeProvider) {

  "use strict";

  $routeProvider

  .when("/forbidden", {
    /* ... */
  })

  .when("/signin", {
    /* ... */
    resolve: {
      access: ["Access", function(Access) { return Access.isAnonymous(); }],
    }
  })

  .when("/home", {
    /* ... */
    resolve: {
      access: ["Access", function(Access) { return Access.isAuthenticated(); }],
    }
  })

  .when("/admin", {
    /* ... */
    resolve: {
      access: ["Access", function(Access) { return Access.hasRole("ADMIN"); }],
    }
  })

  .otherwise({
    redirectTo: "/home"
  });

}]);

这样,如果Access无法解析promise,将触发$routeChangeError事件:

angular.run(["$rootScope", "Access", "$location",
function($rootScope, Access, $location) {

  "use strict";

  $rootScope.$on("$routeChangeError", function(event, current, previous, rejection) {
    if (rejection == Access.UNAUTHORIZED) {
      $location.path("/login");
    } else if (rejection == Access.FORBIDDEN) {
      $location.path("/forbidden");
    }
  });

}]);

请参阅此答案上的完整代码。

仲君昊
2023-03-14

在这里,使用解析应该可以帮助您:(未测试代码)

angular.module('app' []).config(function($routeProvider){
    $routeProvider
        .when('/needsauthorisation', {
            //config for controller and template
            resolve : {
                //This function is injected with the AuthService where you'll put your authentication logic
                'auth' : function(AuthService){
                    return AuthService.authenticate();
                }
            }
        });
}).run(function($rootScope, $location){
    //If the route change failed due to authentication error, redirect them out
    $rootScope.$on('$routeChangeError', function(event, current, previous, rejection){
        if(rejection === 'Not Authenticated'){
            $location.path('/');
        }
    })
}).factory('AuthService', function($q){
    return {
        authenticate : function(){
            //Authentication logic here
            if(isAuthenticated){
                //If authenticated, return anything you want, probably a user object
                return true;
            } else {
                //Else send a rejection
                return $q.reject('Not Authenticated');
            }
        }
    }
});
 类似资料:
  • 主要内容:AngularJS 实例,路由设置对象,AngularJS 实例本章节我们将为大家介绍 AngularJS 路由。 AngularJS 路由允许我们通过不同的 URL 访问不同的内容。 通过 AngularJS 可以实现多视图的单页 Web 应用(single page web application,SPA)。 通常我们的 URL 形式为 http://xnip.cn/first/page,但在单页 Web 应用中 AngularJS 通过 #! + 标记

  • 问题内容: 加载Angular应用后,我需要一些模板可以脱机使用。 这样的事情将是理想的: 问题答案: 有一个 模板缓存服务 :$ templateCache ,可用于在javascript模块中预加载模板。 例如,取自文档: 甚至还有一个艰巨的任务,可以从html文件中预先生成一个javascript模块:grunt-angular- templates 另一种可能不太灵活的方法是使用 内联模板

  • 我正在使用react路由器v4和redux,如果用户未登录,我想使用私有和受保护的路由重定向。 我有一个路由组件: 它是这样实现的: 这是私人路线: 传递prop的最佳方式是什么,如果我连接Routes组件并从那里传递是否可以,或者应该从其他地方传递,或者连接需要它的每个组件并从那里读取?此外,这种方法如何处理嵌套路由,如?谢谢

  • 问题内容: 我正在研究一个新的ASP.NET MVC和AngularJS应用程序,该应用程序旨在作为SPA的集合。我使用MVC区域概念来分隔每个单独的SPA,然后在每个MVC区域内使用AngularJS创建SPA。 由于我是AngularJS的新手,并且无法找到有关结合MVC和AngularJS路由的答案,因此我想在这里发表我的问题,以查看是否可以获得帮助。 我有标准的MVC路由设置,可用于每个M

  • 我正在使用Vue2和Vue Router 3.5构建SPA应用程序 应用程序有两个身份验证路径,“admin”和“organization” 我设置了路由器,这样每个授权保护在url中都有自己的前缀 '/auth/:防护' '/组织' /admin 路由器文件如下所示: 在组织文件内部,我返回一个对象: 在以前的项目中,我使用router.beforeEach来处理系统中的导航。 路由器的问题。b

  • 问题内容: 我目前有一个内置路由的AngularJS应用程序。它可以正常工作,并且一切正常。 我的app.js文件如下所示: 我的应用程序内置了CMS,您可以在其中复制 / pages 目录中的新html文件并添加新的html文件。 即使对于新动态添加的文件,我仍然希望通过路由提供程序。 在理想的情况下,路由模式为: $ routeProvider.when(’/ pagename ‘,{temp

  • 问题内容: 我想创建一个使用asp.net mvc webapi作为后端和客户端路由(没有cshtml)的SPA angularjs应用程序中的身份验证和授权的示例。以下只是可用于设置完整示例的函数示例。但是我不能一概而论。任何帮助表示赞赏。 问题: 最佳实践是什么:基于Cookie或令牌? 如何创建有角度的承载令牌以对每个请求进行授权? 验证API函数? 如何在客户端上保留登录的登录用户? 示例

  • 问题内容: 我有一个单页应用程序,实际上只有一个页面。只有一个视图使用angularjs完成了许多javascript / ajax逻辑,但是没有路由到其他视图。 因此,我想在网址末尾混搭hashbang(#/)。我可以以某种方式完全关闭angularjs路由吗? 顺便说一句:我了解Htm5Mode,但是我希望它能在所有浏览器中使用。 问题答案: 如果没有定义,则不会进行路由,因此您的url中不会