在play2剪影JWTAuthenticator中达到JWT令牌

时间:2014-12-11 06:58:31

标签: scala playframework jwt

Play-silhouette-rest激活器模板提供了一个很好的example如何使用REST身份验证/使用HeaderAuthenticator注册。登录请求它会创建用户并在响应正文和标题中返回令牌

 val response = Ok(Json.toJson(Token(token = authenticator.id, expiresOn = authenticator.expirationDate)))
 env.authenticatorService.init(authenticator, Future.successful(response))

在这个例子中,我在正文中获得相同的标记(在第一行初始化)和标题(在第二行初始化)。

愿意使用JWTAuthenticator,我改变了代码使用它(代码是相同的,只有一个区别是依赖注入代码)所以我期望相同的外观。

但是使用JWTAuthenticator authenticator.id为我提供了另一个生成的ID(基于之后生成真正的JSON Web令牌),而JSON Web Token仅在第二个代码行的头中写入。

我愿意在响应体中返回真正的json网络令牌,但是在我用同样的方法写入之后不想读取标题。

有没有解决方案?

1 个答案:

答案 0 :(得分:3)

我看到的唯一解决方案是使用请求而不是响应来初始化身份验证器。这是可能的,因为authenticator服务包含两个init方法。第一个可以使用响应启动身份验证器,第二个可以使用请求启动身份验证器。

env.authenticatorService.init(authenticator, request).map { r =>
  r.headers.get("X-Auth-Token") match {
    case Some(token) => Ok(Json.toJson(Token(token = token, expiresOn = authenticator.expirationDate)))
    case None => BadRequest("Couldn't generate token")
  }
}

我将看看是否可以添加一个初始化验证器的额外init方法并返回生成的值。您可以按照issue

进行操作