我正在使用NbAuthJWTToken和ngx-admin进行身份验证,但我得到了这个错误:
错误错误:未捕获(在promise中):错误:静态注入错误(AppModule)[NbIsGrantedDirective-
这是我的文件内容: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 {
}
app.路由:
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]
};
}
}
我还在我的项目和卫士文件夹中添加了星云身份验证组件
您应该在您的AppModule中导入NbSecurityModule。它为我解决。
在您的app. module.ts文件中添加以下内容:
导入:[…NbSecuritymodule. forRoot(),
…]
您发布的错误说明您使用的是NbIsGrantedDirective
,并且该指令需要NbAccessChecker
。要提供NbAccessChecker
,请安装npm i@ne的/security
并将SecurityModule
导入您的应用程序。您可以在此处找到详细的留档。