带有 WebApi 的 Dnn SPA 模块适用于管理员,但不适用于注册用户

雅克

我有一个基于 Angular 6 的 Dnn SPA 模块,它可以调用 Dnn 服务框架。所有这些都适用于属于管理员角色的用户,但是当用户仅使用所有用户或注册用户角色登录时,我们会在 Chrome Dev Console 中收到以下错误:

错误类型错误:无法读取未定义的属性“长度”在 http.js:108 at Array.forEach () at HttpHeaders.lazyInit (http.js:102) at HttpHeaders.push../node_modules/@angular/common/fesm5/ http.js.HttpHeaders.init (http.js:166) at HttpHeaders.push../node_modules/@angular/common/fesm5/http.js.HttpHeaders.forEach (http.js:235) at Observable._subscribe (http .js:1435) 在 Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe (ReplaySubject.js:83) 在 Observable.push../node_modules/rxjs/_esm5/internal/Observable .js.Observable.subscribe (ReplaySubject.js:69) at tryCatch.js:17 at subscribeToResult (index.js:1)

我认为可能出于某种原因,我们的拦截器没有添加 HTTPHeaders,但是查看 Network 选项卡,我们从未进行过任何调用。

解决问题的尝试:

检查 Angular 是否正在
启动 我的 Angular 应用程序中有一个应用程序初始值设定项,因此我向它添加了一个控制台日志,该日志正在被触发:

export function appInitializer(configurationService: ConfigurationService) {
  configurationService.configuration.antiforgeryToken = dnnService.framework.getAntiForgeryValue();
  configurationService.apiPath = dnnService.framework.getServiceRoot(dnnService.path);
  configurationService.configuration.moduleId = dnnService.moduleId;
  configurationService.configuration.tabId = dnnService.tabId;
  configurationService.configuration.tabModuleId = dnnService.tabModuleId;
  console.log('configuration for app initializer: ', configurationService);

  return () => true;
}

检查防伪令牌

应该添加的一个 HTTPHeader 是防伪令牌

dnnService.framework.getAntiForgeryValue()

由于某种原因,该值对于注册用户为空,而对于管理员用户具有适当的值。但是,如果甚至没有拨打电话,那么我不确定这可能是导致问题的原因。

为 WebApi 调用添加了额外的日志记录

我发现了一个可疑的日志条目,但无法将其与问题联系起来:

[警告] DotNetNuke.Entities.Tabs.TabController - 门户 0 的无效 tabId -1

更改了所有 WebApi 控制器的 AccessLevel
我将所有 DnnModuleAuthorisation 更改为以下内容:

[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Anonymous)]

我也试过

[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)]

这没有什么区别。

检查对 HTTP WebApi 端点的第一次调用是否正在触发
在 ngDoBootstrap 中,我进行了第一个 HTTP 调用,这是事情停止运行的地方,因此这会让我相信 Angular 中实际上存在问题:

 ngDoBootstrap(app) {
    console.log('about to get settings');

    this.settingsService.getSettings().subscribe((settings: Settings) => {
      console.log('fired call to get settings');  //<- Never gets here    
    });
  }

getSettings().subscribe 中的 console.log 永远不会触发!

关于要检查的其他内容的任何提示或指导都会很棒。

雅克

原来它是RequestVerificationToken。出于某种原因,Dnn 仅输出管理员的令牌,或者当我已删除的皮肤 (?) 中存在搜索框时。

解决方法是添加搜索并使用样式将其隐藏。例如

<div id="search-top" style="display:none !important">
    <dnn:SEARCH ID="dnnSearch2" runat="server" ShowSite="false" ShowWeb="false" EnableTheming="true" Submit="Search" CssClass="SearchButton" />
</div>

我已经用非管理员用户测试过它并且它有效。

有关更多信息,请参阅DnnTracker 上发布的相关Dnn 9 错误

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

GET请求在邮递员中有效,但不适用于RestTemplate-SpringBoot

图表不适用于带有打字稿的React

Owin Bearer令牌不适用于WebApi

带有Sinch VOIP的Pushkit不适用于pushkit

postgis不适用于所有postgres用户

Python Messenger Bot仅适用于管理员,不适用于所有人

Codepush不适用于所有android用户

发行Django V 1.11.16管理员搜索不适用于所有数据

带有邮递员的GET请求有效,但不适用于python(HTTPSConnectionPool)

悬停不适用于带有textarea的div元素

带有ref的扩展方法不适用于数组

Angular Universal --bundledependencies“所有”不适用于Firebase,“无”不适用于我的制图模块吗?

div对齐不适用于带有菜单的标题

带有spa和webapi的azure ad b2c

没有密码的SSH不适用于用户postgres

MVC WebApi CamelCasingPropertyNames不适用于BadRequest

Autofac WebApi集成不适用于MultiTenant容器

npm命令不适用于带有zsh的WSL

方法适用于文字值,但不适用于具有相同值的变量

get_user_by('ID',7)适用于用户,但不适用于管理员

试图从 Avada Wordpress 站点中删除顽固的管理栏(适用于所有用户,包括管理员)

带有标题下拉菜单的导航适用于世博小吃,但不适用于 CLI

GestureRecognizer 不适用于带有 DataTemplate 的 CollectionView

带有 Plotly/python 数据框的语言环境库适用于 jupyter,但不适用于 Flask/dash

导入错误:没有名为 PIL 的模块适用于 3.7,但不适用于 3.8

href 不适用于带有 :after content:''" 的图像;

更改为带有空格的目录...适用于 .ipynb 但不适用于 .py?

WebSql 不适用于这种带有输入的表单

样式不适用于带有 TailwindCSS 的 NextJS