使用 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);
}
我的问题是:在请求范围内存储和访问用户信息的最简单方法是什么?
到目前为止我发现了什么:
- 下面的Whosebug-post好像是相关的,但是
解决方案对我来说听起来像是一项开销 ()
- 我也可以在 updateEntity 方法中附加用户信息,但我必须始终明确地添加。
还有其他选择吗?
我使用以下 npm 包将用户保存在我的请求范围内:https://www.npmjs.com/package/cls-hooked。
这个包对我不起作用,因为 async/await 似乎不受支持:continuation-local-storage。
您可以使用 SaveOptions 的 any 类型的属性 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
我正在使用带有 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);
}
我的问题是:在请求范围内存储和访问用户信息的最简单方法是什么?
到目前为止我发现了什么:
- 下面的Whosebug-post好像是相关的,但是 解决方案对我来说听起来像是一项开销 ()
- 我也可以在 updateEntity 方法中附加用户信息,但我必须始终明确地添加。
还有其他选择吗?
我使用以下 npm 包将用户保存在我的请求范围内:https://www.npmjs.com/package/cls-hooked。
这个包对我不起作用,因为 async/await 似乎不受支持:continuation-local-storage。
您可以使用 SaveOptions 的 any 类型的属性 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