我有一个 Play 应用程序,它允许用户使用社交服务提供商登录,并且身份验证设置与 Play-Silhouette-Slick 种子示例相同。下面的代码可能没问题,但我还是把它包括在内了。
def authenticate(provider: String): Action[AnyContent] = Action.async { implicit request =>
(socialProviderRegistry.get[SocialProvider](provider) match {
case Some(provider: SocialProvider with CommonSocialProfileBuilder) =>
provider.authenticate().flatMap {
case Left(result) => Future.successful(result) // Redirect user to social provider
case Right(authInfo) => for {
profile <- provider.retrieveProfile(authInfo)
user <- userService.save(profile)
authInfo <- authInfoRepository.save(profile.loginInfo, authInfo)
authenticator <- silhouette.env.authenticatorService.create(profile.loginInfo)
cookie <- silhouette.env.authenticatorService.init(authenticator)
result <- silhouette.env.authenticatorService.embed(cookie, Redirect(routes.EateriesController.eaterySelection()))
} yield {
silhouette.env.eventBus.publish(LoginEvent(user, request))
println("Just to verify that everything went well")
result
}
}
case _ => Future.failed(new ProviderException(s"Cannot authenticate with unexpected social provider $provider"))
}).recover {
case e: ProviderException =>
logger.error("Unexpected provider error", e)
Redirect(routes.SignInController.index()).flashing("error" -> Messages("could.not.authenticate"))
}
}
我的问题是,在用户登录后,我的应用程序的端点无法检测到用户已登录。当我在登录后立即被重定向到页面时,我可以在 Firefox 中验证是否设置了身份验证器 cookie,但很快当我导航到我的应用程序中的另一个页面时,cookie 不再存在。
我猜我的应用程序认为 cookie 无效或什么,然后将其删除,但我目前不知道。是否有其他原因导致这种情况发生/我应该如何记录我的应用程序以缩小问题范围?