Я использую 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)))
}
Но это не решило проблему. Я неопытен с такой проблемой и хотел бы помочь.