如何在Dart Aqueduct服务器中获取请求标头

时间:2019-04-09 23:41:47

标签: dart http-headers httprequest aqueduct

我想从请求的Authorization标头中获取令牌。

import 'dart:async';
import 'package:aqueduct/aqueduct.dart';


class SecretController extends ResourceController {

  @Operation.get()
  Future<Response> signin() async {

    request.headers // ??? not available

  }
}

如何访问Aqueduct中的标头?

1 个答案:

答案 0 :(得分:1)

请求是Dart标准库中原始HttpRequest对象的包装,所以一种方法是像这样访问它:

request.raw.headers["authorization"]

您还可以将标头的值绑定到方法参数。当您想将字符串标题值解析为另一种类型和/或验证标题时,这很好。 (You can do some really convenient stuff with binding.

@Operation.get()
Future<Response> signIn(
  @Bind.header("authorization") String authorization) async {
  ...
}

最后,特定于Authorization标头,您可以使用Authorizer中间件。这将验证授权标头,并创建一个Authorization对象,其中包含可以从您的方法访问的授权资源所有者(“用户”)的详细信息。

router.route("/secret")
  .link(() => Authorizer.bearer(authServer))
  .link(() => SecretController());

...

@Operation.get()
Future<Response> signIn() async {
  final userIDForRequest = request.authorization.ownerID;
}