Как мне устранить это несоответствие с библиотекой Silhouette Scala при отбрасывании аутентификаторов? - PullRequest
0 голосов
/ 09 января 2019

Я использую play-silhouette-library версии 2.0.2 для аутентификации на моем сайте.

Прямо сейчас у меня есть этот метод, который активируется, когда пользователь выходит из системы:

def signOut(url: String) = SecuredAction.async { implicit request =>
    val result = Future.successful(Redirect(url))
    env.eventBus.publish(LogoutEvent(request.identity, request, request2lang))
    request.authenticator.discard(result)
}

Однако только в Chrome (не в Firefox) пользователь не может выйти из системы примерно 40% времени. Я полагал, что это произошло из-за какого-то состояния гонки с отбрасыванием аутентификатора, поэтому в качестве быстрого теста я добавил Thread.sleep(20) перед сбросом аутентификатора:

def signOut(url: String) = SecuredAction.async { implicit request =>
    val result = Future.successful(Redirect(url))
    env.eventBus.publish(LogoutEvent(request.identity, request, request2lang))
    Thread.sleep(20)
    request.authenticator.discard(result)
}

и проблема не возникнет. Однако добавление вызова Thread.sleep() не совсем готовый к работе код, поэтому мне сложно найти решение.

Я пытался:

def signOut(url: String) = SecuredAction.async { implicit request =>
    val publish = Future.successful(
      env.eventBus.publish(LogoutEvent(request.identity, request, request2lang))
    )
    Await.ready(publish, Duration.Inf)
    request.authenticator.discard(Future(Redirect(url)))
}

Но это не решило проблему. Я неопытен с такой проблемой и хотел бы помочь.

...