Аутентификация сессии не работает в Play при использовании Silhouette - PullRequest
0 голосов
/ 13 мая 2018

Я использую Silhouette библиотеку безопасности. Мой Play сервер, похоже, отправляет пустую Session информацию в ответ. Что я делаю не так?

Ниже приводится печать на консоли Play's непосредственно перед отправкой ответа.

Session(Map(authenticator -> 1-jtwBvA+LsLKE2rnkT/nMH1aQF9xc1twhECrma9mj3NUhUdVDmh/4wxQ2MxDOjcxkvEMTi1k63Dg5ezl+9FzDE3miaM5DbOrhyqAyGu4+30mHHV3QdPKA3IQQx5UdL1Hu85fZRI4f3Ef+q6xAgboDps0uBob5ojzo5Oqy8FNsoexn7Wr9iRyTr5xrMrLvl9GNQa+rA3q8qvW84sJaSei2iydrP2OjUbnnzo+zgrHLB3Bn7KJxOcFH4h9CikZNk/FHbtDm4uxzcK3paK1CuuIWLE8yvcYdavJ+4ejV5IaJ8QesJQRFgBktD9L/A2bc03eaA8wm)))

Но в окне браузера я заметил, что значение пусто.

enter image description here

Set-Cookie: PLAY_SESSION=; Max-Age=-86400;

Обратите внимание, что в моем браузере ранее уже был файл cookie PLAY_SESSION из предыдущих тестовых прогонов. Тем не менее, я ожидаю, что клиентское приложение (Angular) переопределит старые куки с новыми куки. Я прав?

Ниже приведен фрагмент кода, который создает, инициализирует и вставляет информацию о сеансе

val AuthenticatorFuture: Future[SessionAuthenticator] = silhouette.env.authenticatorService.create(loginInfo) //create authenticator

                      AuthenticatorFuture.flatMap(authenticator => { //got the authenticator
                        val securityTokenFuture: Future[Session] = silhouette.env.authenticatorService.init(authenticator) //init authenticator
                        securityTokenFuture.flatMap(securityToken=> { 
                          println("adding security token: ",securityToken)
                          val result:Future[AuthenticatorResult] = silhouette.env.authenticatorService.embed(securityToken, Ok(Json.toJson(JsonResultSuccess("found user"))))
                          result

Environment определяется как

trait SessionEnv extends Env {
  type I = User 
  type A = SessionAuthenticator
}

Как передается моему контроллеру как

silhouette: Silhouette[SessionEnv]

я создал во время компиляции следующим образом

val configSession =  SessionAuthenticatorSettings()
val sessionAuthenticatorService = new SessionAuthenticatorService(configSession,fingerprintGenerator,authenticatorEncoder,new DefaultSessionCookieBaker(),clock)
val sessionEnv = com.mohiva.play.silhouette.api.Environment[SessionEnv](userIdentityService,sessionAuthenticatorService,Seq(),EventBus())

1 Ответ

0 голосов
/ 13 мая 2018

Вероятно, проблема в ожидаемом поведении Play Framework, поскольку Silhouette не изменяет файл cookie сеанса.Я заметил, что в браузере уже был файл cookie с истекшим сроком действия, и он отправляет его в запросе signin.Когда Silhouette аутентификатор видит просроченный cookie, он отправляет пустое значение обратно.Я думаю, что это должно заставить браузер отказаться от предыдущего cookie.

enter image description here

...