Играть, не признавая AuthenticatorResult в качестве результата - PullRequest
0 голосов
/ 27 апреля 2018

В моем коде я возвращаю AuthenticatorResult, созданный методом embed из CookieAuthenticatorService. Но я получаю ошибку компиляции

Error:(270, 27) type mismatch; found : scala.concurrent.Future[com.mohiva.play.silhouette.api.services.AuthenticatorResult] required: play.api.mvc.Result result

Мой код

val result:Future[AuthenticatorResult] = silhouette.env.authenticatorService.embed(cookie, Ok(Json.toJson(JsonResultSuccess("found user"))))
result

код работает, если я возвращаю Ok вместо result

Это работает

val result:Future[AuthenticatorResult] = silhouette.env.authenticatorService.embed(cookie, Ok(Json.toJson(JsonResultSuccess("found user"))))
//result
Ok(Json.toJson(JsonResultError("registration not complete")))

Я определил свое Действие как def signInUser = silhouette.UserAwareAction.async {..}

Что я делаю не так?

AuthenticatorResult здесь определено - http://api.play.silhouette.rocks/5.0.0/com/mohiva/play/silhouette/api/services/AuthenticatorResult.html

CookieAuthenticatorService здесь определено - http://api.play.silhouette.rocks/5.0.0/com/mohiva/play/silhouette/impl/authenticators/CookieAuthenticatorService.html

1 Ответ

0 голосов
/ 28 апреля 2018

Упс, мой плохой. Проблема не в AuthenticatorResult, а Future{AuthenticatorResult}. Я должен был использовать flatMap вместо map в своем коде перед возвратом result. Это рабочий кусок кода.

val cookieAuthenticatorFuture: Future[CookieAuthenticator] = silhouette.env.authenticatorService.create(loginInfo) //create authenticator

                      cookieAuthenticatorFuture.flatMap(cookieAuthenticator => {
                        val cookieFuture: Future[Cookie] = silhouette.env.authenticatorService.init(cookieAuthenticator) //init authenticator
                        cookieFuture.flatMap(cookie => { //this was earlier map. Changed it to flatMap and it worked.
                          val result:Future[AuthenticatorResult] = silhouette.env.authenticatorService.embed(cookie, Ok(Json.toJson(JsonResultSuccess("found user"))))
                          result

                        })
...