複数のプロジェクトで使用する分散認証ライブラリを実装したいと考えています。ライブラリは JWT 認証方式を実装する必要があります。コードは次のとおりです。
jwt.strategy.ts
import {ExtractJwt, Strategy} from 'passport-jwt';
import {PassportStrategy} from '@nestjs/passport';
import {Injectable} from '@nestjs/common';
import {JwtPayload, User} from './interfaces';
import {ConfigService} from "./config.service";
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
constructor(private readonly configService: ConfigService) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: configService.get('secretOrPrivateKey'),
});
}
async validate(payload: JwtPayload): Promise<User> {
return {
uuid: payload.uuid,
email: payload.email,
}
}
}
jwt.auth.module.ts:
import {Module, DynamicModule} from '@nestjs/common';
import {JwtModule} from '@nestjs/jwt';
import {JwtStrategy} from './jwt.strategy';
import {PassportModule} from '@nestjs/passport';
import {ConfigService} from "./config.service";
import {JwtOptions} from "./interfaces/jwt.options";
@Module({
})
export class JwtAuthModule {
static forRoot(jwtOptions): DynamicModule {
return {
module: JwtAuthModule,
imports: [
// JwtModule.register(jwtOptions),
// PassportModule.register({defaultStrategy: 'jwt'}),
],
providers: [
JwtStrategy,
{
provide: ConfigService,
useValue: new ConfigService(jwtOptions),
}
],
exports: [ConfigService, JwtStrategy]
};
}
}
そして私はこれを私の中にインポートしましたapp.module.ts
:
import { Module, NestModule, HttpModule } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { environment } from './environments';
import { AuthModule } from './auth/auth.module';
import { PermissionModule } from './permission/permission.module';
import {JwtAuthModule} from '@pe/nest-kit';
import {JwtModule} from '@nestjs/jwt';
import {PassportModule} from '@nestjs/passport';
@Module({
imports: [
JwtModule.register(environment.jwtOptions),
PassportModule.register({defaultStrategy: 'jwt'}),
JwtAuthModule.forRoot(environment.jwtOptions),
HttpModule,
AuthModule,
PermissionModule,
MongooseModule.forRoot(environment.mongodb),
],
})
export class ApplicationModule implements NestModule {
configure() {
}
}
ただし、プロジェクトの URL を開こうとするたびに、エラーが発生します。
[Nest] 27645 - 24.10.2018、15:23:26 [ExceptionsHandler] 未知の認証戦略 "jwt" +4119ms エラー: 試行時の未知の認証戦略 "jwt" (/home/user/workspace/permissions/node_modules/passport/lib /middleware/authenticate.js:187:37) 認証時 (/home/user/workspace/permissions/node_modules/passport/lib/middleware/authenticate.js:363:7) で Promise (/home/user/workspace/permissions) /node_modules/@nestjs/passport/dist/auth.guard.js:83:3) /home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js の新しい Promise () で: MixinAuthGuard で 75:83。(/home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js:47:36) Generator.next () at /home/user/workspace/permissions/node_modules/@nestjs/パスポート/dist/auth.guard.js:19:
私は何を間違っていますか?