NestJS jwt-passport身份验证 [英] NestJS jwt-passport Authentication

查看:726
本文介绍了NestJS jwt-passport身份验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现一个分布式身份验证库,以便在多个项目中使用它.该库应实现JWT身份验证方法.代码如下:

I want to implement a distributed authentication library to use it on several projects. The library should implement JWT authentication method. The code is as follows:

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中:

and I have imported this in my 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时,都会收到错误消息:

however, each time I try to open project url, I'm getting an error:

[嵌套] 27645-2018年10月24日,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) 在新的Promise() 在/home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js:75:83 在MixinAuthGuard. (/家庭/用户/工作区/权限/node_modules/@nestjs/passport/dist/auth.guard.js:47:36) 在Generator.next() 在/home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js:19:71 在新的Promise() 在__awaiter(/home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js:15:12) 在MixinAuthGuard.canActivate(/home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js:40:20) 在GuardsConsumer.tryActivate(/home/user/workspace/permissions/node_modules/@nestjs/core/guards/guards-consumer.js:13:34) 在canActivateFn(/home/user/workspace/permissions/node_modules/@nestjs/core/router/router-execution-context.js:97:59) 在/home/user/workspace/permissions/node_modules/@nestjs/core/router/router-execution-context.js:47:37 在/home/user/workspace/permissions/node_modules/@nestjs/core/router/router-proxy.js:8:23 在Layer.handle [作为handle_request](/home/user/workspace/permissions/node_modules/express/lib/router/layer.js:95:5)

[Nest] 27645 - 24.10.2018, 15:23:26 [ExceptionsHandler] Unknown authentication strategy "jwt" +4119ms Error: Unknown authentication strategy "jwt" at attempt (/home/user/workspace/permissions/node_modules/passport/lib/middleware/authenticate.js:187:37) at authenticate (/home/user/workspace/permissions/node_modules/passport/lib/middleware/authenticate.js:363:7) at Promise (/home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js:83:3) at new Promise () at /home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js:75:83 at MixinAuthGuard. (/home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js:47:36) at Generator.next () at /home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js:19:71 at new Promise () at __awaiter (/home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js:15:12) at MixinAuthGuard.canActivate (/home/user/workspace/permissions/node_modules/@nestjs/passport/dist/auth.guard.js:40:20) at GuardsConsumer.tryActivate (/home/user/workspace/permissions/node_modules/@nestjs/core/guards/guards-consumer.js:13:34) at canActivateFn (/home/user/workspace/permissions/node_modules/@nestjs/core/router/router-execution-context.js:97:59) at /home/user/workspace/permissions/node_modules/@nestjs/core/router/router-execution-context.js:47:37 at /home/user/workspace/permissions/node_modules/@nestjs/core/router/router-proxy.js:8:23 at Layer.handle [as handle_request] (/home/user/workspace/permissions/node_modules/express/lib/router/layer.js:95:5)

我在做什么错了?

推荐答案

尝试将JwtStrategy作为提供程序添加到模块中:

Try to add the JwtStrategy as a provider in your module :

@Module({
  imports: [
   ....
  ],
  providers: [JwtStrategy],
})

然后重试!

这篇关于NestJS jwt-passport身份验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆