使用Silhouette时,会话身份验证在Play中无效

时间:2018-05-13 09:26:08

标签: playframework-2.6 silhouette

我正在使用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;

请注意,我之前的浏览器已经有过以前测试运行的PLAY_SESSION cookie。但是,我希望客户端应用程序(Angular)会使用新cookie覆盖旧cookie。我是对的吗?

以下是创建,初始化和嵌入会话信息的代码段

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 :(得分:0)

问题可能是Play Framework的预期行为,因为Silhouette不会修改会话Cookie。我注意到浏览器已经有一个以前过期的cookie,它会在signin请求中发送它。当Silhouette身份验证器看到过期的cookie时,它会返回一个空值。我认为这是为了让浏览器丢弃之前的cookie。

enter image description here