[英]Reaching JWT Token in play2 silhouette JWTAuthenticator
Play-silhouette-rest激活器模板提供了一个很好的示例,说明如何使用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网络令牌,但在用相同的方法编写标头后,不想读取标头。
有什么解决办法吗?
我看到的唯一解决方案是使用请求而不是响应来初始化身份验证器。 这是可能的,因为身份验证器服务包含两个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方法来初始化身份验证器并返回生成的值。 您可以关注此问题 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.