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网络令牌,但是在我用同样的方法写入之后不想读取标题。
有没有解决方案?
答案 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。
进行操作