2016-05-06 1 views
0

Utilisation du modèle de graine slick Slala Silhouette J'essaie d'implémenter l'authentification dans Play. Lors de l'authentification (lorsque vous cliquez sur Connexion), j'obtiens cette erreur dans la console. Des idées sur où aller pour résoudre ce problème? Je dois noter que je suis assez nouveau pour le système Silhouette et Scala lui-même.La silhouette de Scala ne peut pas s'authentifier

[error] a.a.ActorSystemImpl - Uncaught fatal error from thread [application-akka.actor.default-dispatcher-3] shutting down ActorSystem [application] 
java.lang.NoSuchMethodError: play.api.libs.functional.syntax.package$.functionalCanBuildApplicative(Lplay/api/libs/functional/Applicative;)Lplay/api/libs/functional/FunctionalCanBuild; 
    at com.mohiva.play.silhouette.impl.authenticators.CookieAuthenticator$.<init>(CookieAuthenticator.scala:92) 
    at com.mohiva.play.silhouette.impl.authenticators.CookieAuthenticator$.<clinit>(CookieAuthenticator.scala) 
    at com.mohiva.play.silhouette.impl.authenticators.CookieAuthenticatorService.init(CookieAuthenticator.scala:229) 
    at com.mohiva.play.silhouette.impl.authenticators.CookieAuthenticatorService.init(CookieAuthenticator.scala:148) 
    at controllers.CredentialsAuthController$$anonfun$authenticate$1$$anonfun$apply$3$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$7.apply(CredentialsAuthController.scala:72) 
    at controllers.CredentialsAuthController$$anonfun$authenticate$1$$anonfun$apply$3$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$7.apply(CredentialsAuthController.scala:70) 
    at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251) 
    at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249) 
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) 
    at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55) 

méthode elle-même:

def authenticate = Action.async { implicit request => 
    SignInForm.form.bindFromRequest.fold(
     form => Future.successful(BadRequest(views.html.signIn(form))), 
     data => { 
     val credentials = Credentials(data.email, data.password) 
     credentialsProvider.authenticate(credentials).flatMap { loginInfo => 
      val result = Redirect(routes.ApplicationController.index()) 
      userService.retrieve(loginInfo).flatMap { 
      case Some(user) => 
       val c = configuration.underlying 
       env.authenticatorService.create(loginInfo).map { 
       case authenticator if data.rememberMe => 
        authenticator.copy(
        expirationDateTime = clock.now + c.as[FiniteDuration]("silhouette.authenticator.rememberMe.authenticatorExpiry"), 
        idleTimeout = c.getAs[FiniteDuration]("silhouette.authenticator.rememberMe.authenticatorIdleTimeout"), 
        cookieMaxAge = c.getAs[FiniteDuration]("silhouette.authenticator.rememberMe.cookieMaxAge") 
       ) 
       case authenticator => authenticator 
       }.flatMap { authenticator => 
       env.eventBus.publish(LoginEvent(user, request, request2Messages)) 
       env.authenticatorService.init(authenticator).flatMap { v => 
        env.authenticatorService.embed(v, result) 
       } 
       } 
      case None => Future.failed(new IdentityNotFoundException("Couldn't find user")) 
      } 
     }.recover { 
      case e: ProviderException => 
      Redirect(routes.ApplicationController.signIn()).flashing("error" -> Messages("invalid.credentials")) 
     } 
     } 
    ) 
    } 

Ce sont les axes d'exception de la ligne à -

env.authenticatorService.embed(v, result) 

Répondre

1

Le problème était Silhouette 3.0 et 2.5.3 Jouer incompatibilité. Après la mise à niveau de Silhouette vers la version 4.0 Bêta4, certains changements ont permis de la faire fonctionner.