0

Scala Silhouette slick シード テンプレートを使用して、Play で認証を実装しようとしています。認証時 (サインインをクリックしたとき) - コンソールにこのエラーが表示されます。これを修正するためにどこに進むべきかについてのアイデアはありますか? 私は、Silhouette と Scala システム自体にかなり慣れていないことに注意する必要があります。

[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)

メソッド自体:

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"))
        }
      }
    )
  }

これはライン例外ピンです -

env.authenticatorService.embed(v, result) 
4

1 に答える 1

1

問題は、Silhouette 3.0 と Play 2.5.3 の非互換性でした。Silhouette を 4.0 Beta4 にアップグレードした後、いくつかの変更を加えて実行しました。

于 2016-05-06T15:52:53.080 に答える