0
認証に対応するために独自のActionRefinerを作成しようとしていますが、何らかの理由でrefine[A]
関数で暗黙の変数を使用できません。Play 2.5のimplicitsの使用ActionRefiner
trait Auth {
object AuthenticatedAction extends ActionBuilder[AuthRequest] with ActionRefiner[Request, AuthRequest] {
def refine[A](request: Request[A])(implicit userCollection: UserCollection, ex: ExecutionContext): Future[Either[Result, AuthRequest[A]]] = {
request.session.get("username") match {
case Some(username) => userCollection.findByEmail(username).map { userOpt =>
userOpt.map(new AuthRequest(_, request)).toRight(Results.Redirect(routes.LoginController.login()))
}
case None => Future.successful(Left(Results.Redirect(routes.LoginController.login())))
}
}
}
}
class AuthRequest[A](val user: User, request: Request[A]) extends WrappedRequest[A](request)
Scalaコンパイラは、メソッドrefine[A](request: R[A]): Future[Either[Result, P[A]]]
が定義されていないことを通知します。それが登録する暗黙の変数を削除すると、いいえで私を残しますUserCollection
...
したがって、どのように正しくActionRefinerを使用しますか?
これは、暗黙的な引数を追加すると、関数が 'ActionRefiner'の' refine'の抽象定義に一致しなくなるためです。そのため、あなたは「定義されていない」メッセージを受け取ります。 – handler