使用 express 访问请求范围内经过身份验证的用户的信息

Accessing information of authenticated user in request scope using express

我正在使用带有 TypeORM 的 Express,目前我遇到了以下情况:

在插入或更新一条记录之前,我总是想将用户名设置为当前记录,以持久保存最后更新这条记录的信息。

使用 TypeORM,这可以通过使用订阅者轻松完成:

@EventSubscriber()
export class Subscriber implements EntitySubscriberInterface {
    beforeUpdate(event: UpdateEvent<any>) {
        const entity = event.entity;
        if(entity instanceof Base) {
            entity.lastUpdatedBy = 'username'; // TODO
        }
    }
}

用户身份验证成功后已知:

@Put('/entity')
public updateEntity(@CurrentUser({required: true}) user: User, @Body enity: Entity): Promise<Entity> {
    Log.info('User successfully authenticated: ' + user)
    return this.manager.update(entity);
}

我的问题是:在请求范围内存储和访问用户信息的最简单方法是什么?

到目前为止我发现了什么:

  1. 下面的Whosebug-post好像是相关的,但是 解决方案对我来说听起来像是一项开销 ()
  2. 我也可以在 updateEntity 方法中附加用户信息,但我必须始终明确地添加。

还有其他选择吗?

我使用以下 npm 包将用户保存在我的请求范围内:https://www.npmjs.com/package/cls-hooked

这个包对我不起作用,因为 async/await 似乎不受支持:continuation-local-storage。

您可以使用 SaveOptionsany 类型的属性 date

@Put('/entity')
public updateEntity(@CurrentUser({required: true}) user: User, @Body enity: Entity): Promise<Entity> {
    Log.info('User successfully authenticated: ' + user)
    return this.manager.update(entity, {data: user});
}

然后,您可以将 Subscriber 中的数据用于:

event.queryRunner.data