使用express访问请求范围中的已认证用户的信息

时间:2018-05-17 14:46:03

标签: express typeorm

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

在插入或更新记录之前,我总是希望将用户名设置为当前记录,以保留上次更新此记录的信息。

使用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. 以下stackoverflow-post似乎是相关的,但是 解决方案听起来像是我的开销(GLOBAL data per HTTP/Session request?
  2. 我也可以在updateEntity方法中附加用户信息,但是我必须一直明确地说明。
  3. 还有其他选择吗?

2 个答案:

答案 0 :(得分:0)

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

此软件包对我不起作用,因为似乎不支持异步/等待:continuation-local-storage。

答案 1 :(得分:0)

您可以使用 SaveOptions any 类型的属性数据

@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