无状态剪影CookieAuthenticator无法找到/删除cookie

时间:2017-04-01 16:31:15

标签: scala playframework silhouette

我有一个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无效或者其他东西,然后将其删除,但我目前没有任何线索。还有其他原因导致这种情况发生/如何记录我的应用程序以缩小问题范围?

2 个答案:

答案 0 :(得分:1)

我建议您的Cookie已过期。

您可以在CookieAuthenticatorSettings中配置它,将cookieMaxAge设置为None,这意味着生成的cookie是瞬态的。

答案 1 :(得分:0)

我的依赖注入设置错了。我没有删除绑定本地时区时钟作为时钟实例的线路,我猜这会导致轮廓模块使用不正确的时钟。我现在有这条线:

bind[Clock].toInstance(Clock())

并删除了这一行:

bind(classOf[Clock]).toInstance(Clock.systemDefaultZone)