我正在使用NbAuthJWTToken和ngx-admin进行身份验证,但出现此错误:
错误错误:未捕获(承诺):错误: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.push ../ node_modules/@angular/core/fesm5/core.js.StaticInjector.get(core.js:795) 在resolveNgModuleDep(core.js:17739) 在NgModuleRef_.push ../ node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get(core.js:18428) 在resolveNgModuleDep(core.js:17739) 在resolvePromise(zone.js:814) 在resolvePromise(zone.js:771) 在zone.js:873 在ZoneDelegate.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) 在排水微任务队列(zone.js:595)
这是我的文件内容: app.module.ts:
/**
* @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 {
}
应用路由:
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:
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]
};
}
}
我也将nebular auth组件添加到了我的项目和guards文件夹中
答案 0 :(得分:2)
您应在AppModule中导入NbSecurityModule。它为我解决。
答案 1 :(得分:0)
您所发布的错误表明您正在使用NbIsGrantedDirective
,并且此伪指令需要NbAccessChecker
。要提供NbAccessChecker
,请安装npm i @nebular/security
并将SecurityModule
导入您的应用程序。您可以找到here的详细文档。
答案 2 :(得分:0)
您需要提供此信息,也可以在core.module.ts中检查ngx-admin以获取完整示例 { 提供:NbRoleProvider,useClass:NbSimpleRoleProvider, }
答案 3 :(得分:0)
在您的app.module.ts文件中添加以下内容:
进口:[
...
NbSecurityModule.forRoot(),
...
]