无法使用 | 组合两个指令Akka-Http 上的运算符
Unable to combine two directives using the | operator on Akka-Http
我想从查询参数或授权中提取令牌 header。
为此,我创建了这个指令:
(parameter("token".optional) | optionalHeaderValueByName("Authorization")).flatMap { _ match {
case Some(token) =>
// authenticate it
complete(...)
case None =>
reject(AuthenticationFailedRejection)
}
}
问题是带有“令牌”查询参数的请求有效,但带有“授权”header(且没有查询参数)的请求无效。 optionalHeaderValueByName
被跳过。
我相信是因为当parameter("token".optional)
被拒绝时,它会自动returns一个401 Unauthorized
回应。
如果确实如此,有没有办法让它也检查 optionalHeaderValueByName
?
我认为 |
运算符就是为此而设计的。
也许它在返回路线时有效?而不是 flatMap
ping?
这个post涵盖相同的use-case:
但由于某些原因,我无法复制它。
谢谢。
I believe it is because when parameter("token".optional) is rejected, it automatically returns a 401 Unauthorized response.
我认为恰恰相反。您将“token”参数设为可选,这意味着当它不存在时它仍然会被接受并且 |
之后的指令永远不会被评估。如果您删除 .optional
并且 token
参数不存在,它将被拒绝,并且将评估 |
之后的指令。
我想从查询参数或授权中提取令牌 header。
为此,我创建了这个指令:
(parameter("token".optional) | optionalHeaderValueByName("Authorization")).flatMap { _ match {
case Some(token) =>
// authenticate it
complete(...)
case None =>
reject(AuthenticationFailedRejection)
}
}
问题是带有“令牌”查询参数的请求有效,但带有“授权”header(且没有查询参数)的请求无效。 optionalHeaderValueByName
被跳过。
我相信是因为当parameter("token".optional)
被拒绝时,它会自动returns一个401 Unauthorized
回应。
如果确实如此,有没有办法让它也检查 optionalHeaderValueByName
?
我认为 |
运算符就是为此而设计的。
也许它在返回路线时有效?而不是 flatMap
ping?
这个post涵盖相同的use-case:
但由于某些原因,我无法复制它。
谢谢。
I believe it is because when parameter("token".optional) is rejected, it automatically returns a 401 Unauthorized response.
我认为恰恰相反。您将“token”参数设为可选,这意味着当它不存在时它仍然会被接受并且 |
之后的指令永远不会被评估。如果您删除 .optional
并且 token
参数不存在,它将被拒绝,并且将评估 |
之后的指令。