【问题标题】:Incorrect rejection is sent to the client错误的拒绝被发送给客户
【发布时间】:2015-08-05 21:35:11
【问题描述】:

我的 Akka/Spray DSL 中有未经身份验证的路由和经过身份验证的路由。下面是简化版的代码

val nakedRoutes = pathPrefix("user") {
  post {
    entity(as[UserNew]) { user =>
      (validate(EmailValidator.getInstance().isValid(user.email), s"Invalid email address ${user.email}") & validate(!user.password.isEmpty, "Password should not be empty")) {
          complete {
            UserWire(new ObjectId(), user.firstName, user.lastName, user.email, user.company, user.role, new ObjectId())
            }
        }
    }
  }
}

val myAuthorization: Directive[Tuple1[String]] = (headerValueByName("X-API-Token") | parameter("token")).tflatMap[Tuple1[String]]{
    case Tuple1(token) => if (!token.isEmpty) provide(token.reverse) else complete(StatusCodes.Forbidden -> "API token is not provided")
  }

val authenticatedRoutes = myAuthorization { user =>
  get { complete { "" } }
}

val routes = (decodeRequest & encodeResponse) {
    authenticatedRoutes ~ nakedRoutes
  }

这个想法是用户发出POST /user 请求,获取令牌并将其用于经过身份验证的路由。

我遇到的问题是,当电子邮件验证失败时,我会收到不正确的拒绝

Request is missing required HTTP header 'X-API-Token'

为什么不抛出最后发生的拒绝?它如何选择什么拒绝返回给客户端?

我可能可以使用 if-else 手动验证电子邮件并返回自定义 complete{},但我不确定使用 akka-http 的方法是否正确。

【问题讨论】:

    标签: scala akka spray akka-http


    【解决方案1】:

    嗯,将 myAuthorization 更改为以下代码会有所帮助,但我不明白为什么 :) 如果 @roland-kuhn 或 @jrudolph 可以对此发表评论,我将不胜感激。

    如果我引用old Spray's doc,我希望myAuthorization 生成的拒绝会被取消,因为post 指令允许请求通过。

    val myAuthorization: Directive[Tuple1[String]] = (headerValueByName("X-API-Token") | parameter("token")).tflatMap[Tuple1[String]]{
      case Tuple1(token) => if (!token.isEmpty) provide(token.reverse) else complete(StatusCodes.Forbidden -> "API token is invalid")
    }.recover {
      case rejections => reject(ValidationRejection("API token is not provided"))
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      相关资源
      最近更新 更多