从 Aqueduct 中的中间件获取用户

问题描述

如何使用 Aqueduct 将来自授权中间件的信息(例如登录用户)公开给后续请求控制器?

例如我的路线是:

.route('/events/[:id]')
.link(() => SecretKeyAuthorizer(context))
.link(() => EventsController(context));

而 SecretKeyAuthorizer 使用标头来查找当前用户。我想在 EventsController 中使用来自用户的信息。

解决方法

经过长时间的搜索,我终于找到了答案。可以在请求对象中为此目的使用作为字典的附件,并在其生命周期内保留。因此,授权方通常会执行以下操作:

  request.attachments["user"] = user;

随后的 RessourceControllers 可以使用它:

  User user = request.attachments["user"] as User;

注意request,是“Controller”类的成员,因此可以通过继承直接访问。