Почему директива аутентификации приводит к ошибке: несоответствие типов?

Я получаю эту ошибку в моем проекте спрея.

Error:(41, 28) type mismatch;
 found   : spray.routing.authentication.ContextAuthenticator[co.s4n.authentication.entities.Usuario]
    (which expands to)  spray.routing.RequestContext => scala.concurrent.Future[scala.util.Either[spray.routing.Rejection,co.s4n.authentication.entities.Usuario]]
 required: spray.routing.directives.AuthMagnet[?]
              authenticate(validateToken) {
                           ^

Это моя черта TokenValidator

trait TokenValidator {

  def validateToken: ContextAuthenticator[Usuario] = {
    ctx =>
      val header = ctx.request.headers.find(_.name == "Access_Token")
      if (header isDefined) {
        doAuth(header.get)
      }
      else {
        Future(Left(AuthenticationFailedRejection(AuthenticationFailedRejection.CredentialsMissing, List())))
      }
  }

  def doAuth(header: HttpHeader): Future[Authentication[Usuario]] = {
    Dao.validateToken(header.value).map {
      case Some(usuario) => Right(usuario)
      case None => Left(AuthenticationFailedRejection(AuthenticationFailedRejection.CredentialsRejected, List()))
    }
  }


}

и это строка, где я получаю эту ошибку

//@DELETE
  //localhost:9090/authenticacion/users/{{userEmail}}
  val `users/{{email}}` =
    pathPrefix(`path-prefix`) {
      pathPrefix(`users-path-prefix` / Segment) {
        emailRef => {
            delete {
              authenticate(validateToken) { **HERE!!!!**
                usuario =>
                  .....
              }
            }
        }
      }
    }

Кто-нибудь знает, что я делаю неправильно?

Спасибо всем заранее!


person Rodrigo Cifuentes Gómez    schedule 19.05.2014    source источник


Ответы (2)


Единственное, чего мне не хватало, так это иметь ExecutionContext в области видимости, а import ExecutionContext.Implicits.global работало нормально.

Это позволяет Future работать, поскольку они объявляют неявный параметр ExecutionContext.

person Rodrigo Cifuentes Gómez    schedule 20.05.2014
comment
Спасибо, сэкономил время) - person Ashalynd; 18.07.2015

Я знаю, что прошло много времени с тех пор, как возник реальный вопрос, но способ сделать это для Spray - определить контекст выполнения с помощью инструментов, которые предоставляет Spray:

implicit def executionContext = actorRefFactory.dispatcher
person Arroadie    schedule 06.10.2015