javascript - NodeJS 登录后动态加载 Angular 模块

标签 javascript node.js angularjs security

首先很抱歉,我在 npm 上没有太多的经验,所以请原谅我 ^^

我有一个使用 Angular 的 http 服务器。现在我在index.html 上加载所有需要的模块,例如:

<!-- internal js files -->
<script src="app.module.js"></script>
<script src="app.config.js"></script>

<script src="do/something.module.js"></script>
<script src="do/something.component.js"></script>
<script src="do/another_thing.module.js"></script>
<script src="do/another_thing.component.js"></script>

因此,当网站加载时,它还会加载所有模块,而不验证我是否“允许查看它们”。这反过来又使其(恕我直言)成为一个巨大的安全风险,因为攻击者可以看到网站的功能以及它如何调用模块中的私有(private) API...

正如我所说,我在这方面确实没有经验。所以我只是想知道:常见的做法是什么?您将如何解决这个问题?

最佳答案

$injector.loadNewModules 支持延迟加载 AngularJs (v1.x) 模块(^v1.6.x)。

此示例假设 angularjs v1.6.x@uirouter/angularjs v1.x.x

为了防止 Angular 模块位于应用程序包内,它不应该成为应用程序依赖关系树的一部分,这意味着 Angular 模块admin不会被导入并用作 app Angular 模块的一部分。

// router config

$stateProvider
  .state('admin', {
    abstract: true,
    url: '/admin',
    onEnter: /*@ngInject*/ (userService, $stateParams) => {
      return userService.getUserFromToken($stateParams.propertyId);
    },
    lazyLoad: $transition$ => {
             // this dynamic import tells webpack to split the admin-panel module (and it dependencies) from the app bundle
      return import(/* webpackChunkName: "admin" */ '../admin-panel/admin-panel.module').then(
        module => $transition$.injector().loadNewModules([module.AdminPanelModule],
      );
    },
  })
  .state('admin.main', { // inherits from admin abstract state
    url: '/',
    views: {
      '@': {
        component: 'dashboard',
      },
    },
  });

使用此状态配置,每当您的应用导航到任何 admin 页面(继承自抽象 admin 状态)时,onEnter 将检查用户是否具有该页面的权限,然后将调用 lazyLoad (仅在第一次),以便将 admin.panel.module 加载到应用程序模块。

关于javascript - NodeJS 登录后动态加载 Angular 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59735773/

相关文章:

javascript - Html2Canvas ...Google map 未呈现

javascript - onClick 在 React 中没有正确触发该函数

node.js - 使用 MongoDB 和 Angular universal/webpack 的关键依赖

javascript - 获取函数中输入变量的名称

html - Angular 动画 ng-cloak 不透明度

javascript - JavaScript使iPad浏览器崩溃

javascript - 如何将开关与 http.get 结合起来

node.js - 将 TypeScript 应用程序发布到 Azure 时找不到模块 '../lib/tsc.js'

javascript - Angularjs 类型错误 :Cannot read property 'GET()' of undefined

javascript - 如何使用 AngularJS ngShow 指令仅显示数组中的元素?