我有一個Play應用程序,允許用戶使用社交提供程序登錄,並將身份驗證設置爲與Play-Silhouette-Slick種子示例相同。下面的代碼可能很好,但我仍然將它包括在內。Stateless Silhouette CookieAuthenticator無法找到/刪除Cookie
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無效或某事,然後刪除它,但我目前沒有線索。有什麼其他原因可能會發生這種情況/我應該如何登錄我的應用程序來縮小問題的範圍?
不幸的是,這不是它。 :( – rusins
Cookie路徑怎麼樣? – mavarazy
我的cookie路徑設置爲「/」,因爲它應該是。 – rusins