String以外のバージョンのSecurity.authenticatedに対して共通の認証特性を実装しようとしています。デフォルトのString(ユーザー名など)ではなく、認証が成功した場合はPersonのインスタンスを返すようにします。コードは、これまでのところ、このようなものです:"type mismatch"型のSecurity.authenticatedを実装しました
trait Secured {
def withPerson[Person](f: => Person => Request[AnyContent] => Result) = {
def findPerson(request:RequestHeader) : Option[Person] =
Person.findByRuid("me")
def noPerson(request:RequestHeader) = Results.BadRequest("No access")
Security.Authenticated[Person](findPerson, noPerson) { person =>
Action { implicit request =>
f(person)(request)
}
}
}
}
Person.findByRuid
がOption[Person]
を返すために、モデルのパッケージで定義されているので、私は、これは単純なことだろうが、typeパラメータ/タイプパスの問題のいくつかの並べ替えを打っています、と受け取る考えました私のモデルメソッドを呼び出す行に、次のコンパイル時のエラーメッセージ:
type mismatch;
found : Option[models.Person]
required: Option[Person]
は私がいるようですが、私のScalaの型教育で何かを見逃しているし、助けをいただければ幸いです。私のmodels.PersonをPerson型パラメータに関連付けるにはどうすればいいですか?あなたはそのための必要はありません見ることができるように、単にリモートwithPerson
def withPerson(f: => Person => Request[AnyContent] => Result)
内の型パラメータを、あなたの問題を解決するために
優秀ような何かを行うことができ、一般的なセキュリティで保護された形質を定義したい場合は、あなたに感謝。どうにかして、型パラメータを入れて固定していた署名を見てください。 – wwkudu
あなたは歓迎です、Scalaを楽しんでください –