Nest JS добавляет еще один секретный ключ для обновления токена sh с помощью @ nestjs / jwt - PullRequest
2 голосов
/ 17 января 2020

Я пытаюсь сделать аутентификацию с доступом и обновить sh токены в Nest Js. Как я видел в документации nest js, я должен зарегистрировать свой секретный ключ в модуле авторизации. Я сделал это.

@Module({
  imports: [
    MongooseModule.forFeature([{ name: 'RefreshToken', schema: RefreshTokenSchema }]),
    UsersModule,
    PassportModule,
    JwtModule.register({
      secret: jwtConstants.secret,
    }),
  ],
  providers: [AuthService, LocalStrategy, JwtStrategy],
  controllers: [AuthController],
})
export class AuthModule {}

Этот секретный ключ используется при создании моих токенов в службе аутентификации.

import { JwtService } from '@nestjs/jwt';
const accessToken = this.jwtService.sign(payload, { expiresIn: '60s'});
const refreshToken = this.jwtService.sign(payload, { expiresIn: '24h' });

Когда я пытаюсь установить секретный ключ в функции this.jwtService.sign как

const accessToken = this.jwtService.sign(payload, 'secretkey' ,{ expiresIn: '60s'})

У меня ошибка. Это говорит мне, что функция может получить только два аргумента. Так как же создать два секретных ключа и использовать друг друга для правильного токена?

1 Ответ

1 голос
/ 26 января 2020

Если я вас правильно понимаю. Похоже, вы пытаетесь использовать две разные стратегии для подписи двух разных типов токенов? Если это так, вам просто нужно использовать несколько именованных стратегий.

Внутри ваших объявлений вы можете сделать что-то вроде следующего:

export class JwtStrategy extends PassportStrategy(Strategy, 'accessToken') {}
export class JwtStrategy2 extends PassportStrategy(Strategy, 'refreshToken') {}

Теперь с двумя разными именами Вы также можете указать свою стратегию по умолчанию. Который, кажется, ваш токен доступа.

@Module({
  imports: [
    MongooseModule.forFeature([{ name: 'RefreshToken', schema: RefreshTokenSchema }]),
    UsersModule,
    PassportModule.register({ defaultStrategy: 'accessToken' }),
    JwtModule.register({
      secret: jwtConstants.secret,
    }),
  ],
  providers: [AuthService, LocalStrategy, JwtStrategy, JwtStrategy2],
  controllers: [AuthController],
})
export class AuthModule {}

И это должно позволить вам выполнить импорт из вашего конструктора с двумя типами сервисов.

И тогда вышеупомянутый код должен работать для подписи с разными временами, вызывая каждую службу индивидуально за свою задачу! Я не запускал этот код, но он должен работать с небольшими изменениями.

...