1

私は次のような習慣を作りたいと思い play.api.mvc.Actionます:

  1. リクエスト内のカスタム データ (アクセス トークンやプロトコル バッファなど) を解析して返します。
  2. 他のアクションと連鎖できる

例えば:

def something = DecodeAccessToken { token: AccessToken => 
  Action {
    // do something with token
    Ok
  }
}

トークンが存在しない場合、アクションは または のいずれかDecodeAccessTokenで早期に戻る必要があります。UnauthorizedBadRequest

4

2 に答える 2

1

これは、Play で推奨されるアプローチではありません。documentationですが、これを次のように記述します。

def DecodeAccessToken(body: AccessToken => Result)(implicit request: Request[_]): Result = {
  val token: AccessToken = // deserialize token from request
  body(token)
}

def something = Action { implicit request =>
  DecodeAccessToken { token: AccessToken =>
    Ok
  }
}
于 2012-08-25T04:38:52.943 に答える
0

基本テンプレートは次のように使用できます。

trait DecodeAccessToken[A] extends Action[A]
object DecodeAccessToken {
  def apply[A](bodyParser: BodyParser[A])(block: AccessToken=>Request[A] => Result) = new DecodeAccessToken[A] {
    def parser = bodyParser
    def apply(req: Request[A]) = {
      val token: AccessToken = //deserialize token from request

      // If there is a problem with the token, do not call `block` below
      // Instead just return Results.BadRequest

      block(token)(req)
    }
  }
  def apply(block: AccessToken => Request[AnyContent] => Result): Action[AnyContent] = {
    DecodeAccessToken(BodyParsers.parse.anyContent)(block)
  }
}
于 2012-08-24T05:34:54.240 に答える