如何使用nestjs + typeorm定期生成数据库连接密码?

6

我按照这个指导(https://docs.nestjs.com/techniques/database)设置了NestJS与PostgreSQL数据库的连接。我创建了一个类来提供连接选项,如下:

export class PostgreeSql implements TypeOrmOptionsFactory{
   async createTypeOrmOptions(): Promise<TypeOrmModuleOptions> {
       const signer = new AWS.RDS.Signer(...)
       signer.getAuthToken({}, (err, token) => {
    ...
}

在上述createTypeOrmOptions方法中,它生成的密码在15分钟内有效。在这15分钟内它可以正常工作,但是当密码令牌过期后,我的应用程序会收到授权错误响应。我有一个调度器来每15分钟生成一个新密码,但我该如何强制nestjs使用新的连接选项重新连接?

你解决了那个问题吗? - undefined
1个回答

0
NestJS的TypeOrmModule在底层使用pg库,并且基本上你传递的选项会被转发到pg中的Pool构造函数。正如在pg页面中所解释的那样,可以通过传递一个生成令牌的函数而不是密码来实现使用短期身份验证令牌进行连接。
简而言之:
在你的NestJS应用程序中像这样注册TypeOrmModule:
    TypeOrmModule.forRoot({
      useFactory: () => {
        const signerOptions = {
          credentials: {
            accessKeyId: 'YOUR-ACCESS-KEY',
            secretAccessKey: 'YOUR-SECRET-ACCESS-KEY',
          },
          region: 'us-east-1',
          hostname: postgresConfig.host,
          port: postgresConfig.port,
          username: postgresConfig.user,
        }
 
        const signer = new RDS.Signer()
 
        const getPassword = () => signer.getAuthToken(signerOptions)

        return {
          type: 'postgres',
          host: postgresConfig.host,
          port: postgresConfig.port,
          username: postgresConfig.user,
          password: getPassword,
          database: postgresConfig.database,
        };
      },
    }),


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接