我正在使用 Scala & Play 2.0
我有一个这样的网址:
/v1/people/search/MTIyOjg3YjYzNmU1YTk5MDdkYjY2MzAyODZiM2RkNTMzYzYw
在我的路线文件中:
POST /v1/people/search/:authToken controllers.v1.Application.searchPeople(authToken: String)
我要做的是创建一个安全特征并获取 :aythToken 并通过自定义操作进行验证,该操作在我的函数/方法调用中替换它:
使操作成为 CustomAuthAction
def searchPeople(authToken: String) = Action { 隐式请求 => }
这样我就可以拒绝基于已解析的请求:authToken 而无需将此值设置为 cookie,我已经知道如何做到这一点。
那么我怎样才能把已经通过的 play :authToken 传递给自定义操作呢?
谢谢
这是我的解决方案:
case class CheckSessionRequest(val user: User, request: Request[AnyContent]) extends WrappedRequest(request)
def RequireAuthToken(f: CheckSessionRequest => Result): Action[AnyContent] = {
Action { request =>
UserValidation.findUserByAuthToken(StringUtil.getAuthTokenFromURL(request.toString)).map { user =>
f(CheckSessionRequest(user, request))
}.getOrElse( // STRANGE ERROR
Ok(Json.generate(StatusHandler("failed","Unknown Login Error","{}"))).withHeaders(
CONTENT_TYPE -> "application/json"
)
)
}
}