首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >StaticInjectorError(AppModule)[NbIsGrantedDirective -> NbAccessChecker]

StaticInjectorError(AppModule)[NbIsGrantedDirective -> NbAccessChecker]
EN

Stack Overflow用户
提问于 2019-01-16 20:20:10
回答 4查看 3.3K关注 0票数 1

我使用NbAuthJWTToken和ngx进行身份验证,但我得到了以下错误:

错误错误:未知(承诺):错误: StaticInjectorError(AppModule)NbIsGrantedDirective -> NbAccessChecker: StaticInjectorError(平台:核心)NbIsGrantedDirective -> NbAccessChecker: NullInjectorError: NbAccessChecker!错误: StaticInjectorError(AppModule)NbIsGrantedDirective -> NbAccessChecker: StaticInjectorError(平台:核心)NbIsGrantedDirective -> NbAccessChecker: NullInjectorError: NbAccessChecker!在NullInjector.push../node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js:717)在resolveToken (core.js:954)在tryResolveToken (core.js:898)在StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:795)在resolveToken (core.js:954)在tryResolveToken (core.js:898)在StaticInjector (core.js:898).push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:795) at resolveNgModuleDep (core.js:17739) at NgModuleRef_.push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (core.js:18428) at resolveNgModuleDep (core.js:17739) at resolvePromise (zone.js:814) at resolvePromise (zone.js:771) at zoneZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)、Object.onInvokeTask (core.js:14134)、ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)、Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)、drainMicroTaskQueue (zone.js:595)的.js:873

这是我的文件内容: app.module.ts:

代码语言:javascript
运行
复制
/**
 * @license
 * Copyright Akveo. All Rights Reserved.
 * Licensed under the MIT License. See License.txt in the project root for license information.
 */
import { APP_BASE_HREF } from '@angular/common';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { CoreModule } from './@core/core.module';

import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { ThemeModule } from './@theme/theme.module';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { AppService } from './app.service';

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    HttpClientModule,
    AppRoutingModule,

    NgbModule.forRoot(),
    ThemeModule.forRoot(),
    CoreModule.forRoot(),
  ],
  bootstrap: [AppComponent],
  providers: [
    { provide: APP_BASE_HREF, useValue: '/' },
    AppService
  ],
})
export class AppModule {
}

app.routing:

代码语言:javascript
运行
复制
import { ExtraOptions, RouterModule, Routes } from '@angular/router';
import { NgModule } from '@angular/core';
import { AuthGuard } from './guards/auth.guard';

const routes: Routes = [
  { path: 'pages',canActivate: [AuthGuard], loadChildren: './pages/pages.module#PagesModule' },
  {
    path: 'auth',
    loadChildren: './@theme/components/auth/auth.module#AuthModule',
  },
  { path: '', redirectTo: 'pages', pathMatch: 'full' },
  { path: '**', redirectTo: 'pages' },
];

const config: ExtraOptions = {
  useHash: true,
};

@NgModule({
  imports: [RouterModule.forRoot(routes, config)],
  exports: [RouterModule],
})
export class AppRoutingModule {
}

core.module:

代码语言:javascript
运行
复制
import {
  ModuleWithProviders,
  NgModule,
  Optional,
  SkipSelf
} from "@angular/core";
import { CommonModule } from "@angular/common";
import {
  NbAuthModule,
  NbDummyAuthStrategy,
  NbPasswordAuthStrategy,
  NbAuthJWTToken
} from "@nebular/auth";
import { NbSecurityModule, NbRoleProvider } from "@nebular/security";
import { of as observableOf } from "rxjs";

import { throwIfAlreadyLoaded } from "./module-import-guard";
import { DataModule } from "./data/data.module";
import { AnalyticsService } from "./utils/analytics.service";
import { environment } from './../../environments/environment';

const socialLinks = [
  {
    url: "https://github.com/akveo/nebular",
    target: "_blank",
    icon: "socicon-github"
  },
  {
    url: "https://www.facebook.com/akveo/",
    target: "_blank",
    icon: "socicon-facebook"
  },
  {
    url: "https://twitter.com/akveo_inc",
    target: "_blank",
    icon: "socicon-twitter"
  }
];

export const NB_CORE_PROVIDERS = [
  ...DataModule.forRoot().providers,
  ...NbAuthModule.forRoot({
    strategies: [
      NbPasswordAuthStrategy.setup({
        name: "email",
        token: {
          class: NbAuthJWTToken,
          key: "token"
        },
        baseEndpoint: environment.apiEndpoint,
        login: {
          endpoint: "/login",
          method: "post"
        },
        requestPass: {
          endpoint: "/forgot",
          method: "post",
          redirect: {
            success: '/auth/reset-password',
            failure: null,
          },
        },
        resetPass: {
          endpoint: "/reset",
          method: "put",
          redirect: {
            success: '/auth/login',
            failure: null,
          },
          resetPasswordTokenKey: 'reset_password_token',
        },
        logout: {
          alwaysFail: false,
          endpoint: '/logout',
          method: 'delete',
          redirect: {
            success: '/auth/login',
            failure: null,
          },
        },
        register: {
          alwaysFail: false,
          endpoint: '/register',
          method: 'post',
          redirect: {
            success: '/auth/login',
            failure: null,
          },
        }
      })
    ],
    forms: {
      login: {
        redirectDelay: 0,
        strategy: 'email',
        rememberMe: true,
        showMessages: {
          success: true,
        },
      },
      register: {
        redirectDelay: 0,
        showMessages: {
          success: true,
        },
      },
      requestPassword: {
        redirectDelay: 0,
        showMessages: {
          success: true,
        },
      },
      resetPassword: {
        redirectDelay: 0,
        showMessages: {
          success: true,
        },
      },
      logout: {
        redirectDelay: 500,
      },
      validation: {
        name: {
          required: true,
        },
        phone: {
          required: true,
          minLength: 8,
          maxLength: 12,
        },
        password: {
          required: true,
        },
        email: {
          required: true
        },
        idNumber: {
          required: true,
          minLength: 8,
          maxLength: 12,
        },
      },
    }
  }).providers,
  AnalyticsService
];

@NgModule({
  imports: [CommonModule],
  exports: [NbAuthModule],
  declarations: []
})
export class CoreModule {
  constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
    throwIfAlreadyLoaded(parentModule, "CoreModule");
  }

  static forRoot(): ModuleWithProviders {
    return <ModuleWithProviders>{
      ngModule: CoreModule,
      providers: [...NB_CORE_PROVIDERS]
    };
  }
}

我还将星云组件添加到我的项目和警卫文件夹中。

EN

回答 4

Stack Overflow用户

发布于 2019-09-06 23:36:54

您应该在您的NbSecurityModule中导入AppModule。它为我解决了。

票数 2
EN

Stack Overflow用户

发布于 2019-10-08 06:27:27

在您的app.module.ts文件中添加以下内容:

进口:. NbSecurityModule.forRoot(), .

票数 2
EN

Stack Overflow用户

发布于 2019-01-17 08:54:16

您发布的错误说明您使用的是NbIsGrantedDirective,这个指令需要NbAccessChecker。要提供NbAccessChecker,请安装npm i @nebular/security并将SecurityModule导入应用程序。详细的文档,您可以找到这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54224749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档