我正在使用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)))
}
但这并不能解决问题。我对这种问题没有经验,很乐意提供帮助。