Играть 2.6 Силуэт сочинять SecuredAction
Я пытаюсь сделать что-то действительно похожее на это. ContextRequest
а также ContextAction
, у меня есть securedRequest
от Silhouette
и я хочу сочинить Action
читать cookie
Я настроил.
разница в том, что я продлил User
от силуэта Identity
DataSourceRequest
class DataSourceRequest[DefaultEnv, B](
val dataSource: Option[String],
val securedRequest: SecuredRequest[DefaultEnv, B]
) extends WrappedRequest[B](securedRequest.request) {
def user: User = securedRequest.identity
def requestV: Request[B] = securedRequest.request
}
DataSourceAction
class DataSourceAction @Inject()
(val parser: BodyParsers.Default)(implicit val executionContext: ExecutionContext)
extends ActionRefiner[({ type R[B] = SecuredRequest[DefaultEnv, B] })#R, ({ type R[B] = DataSourceRequest[DefaultEnv, B] })#R] {
override protected def refine[A](securedRequest: SecuredRequest[DefaultEnv, A]) = Future.successful {
try {
Right(new DataSourceRequest[DefaultEnv, A](
securedRequest.session.get("dataSource").getOrElse("dataSourceMissing"),
securedRequest
))
} catch {
case _: Exception => Left(Results.NotFound)
}
}
}
DefaultEnv
trait DefaultEnv extends Env {
type I = User
type A = CookieAuthenticator
}
Я не могу получить User
так как
(Обратите внимание, что com.mohiva.play.silhouette.api.Identity не соответствует моделям. Пользователь: класс User в сущностях пакета является подклассом признака trait Identity в api пакета, но типы параметров метода должны точно соответствовать.)
Я знаю, что, возможно, мне не хватает обертки.
1 ответ
Попробуйте дать контекст, связанный с вашим Env
, как это:
class DataSourceRequest[Env <: DefaultEnv, B](
val dataSource: Option[String],
val securedRequest: SecuredRequest[Env, B]
) extends WrappedRequest[B](securedRequest.request) {
def user: User = securedRequest.identity
def requestV: Request[B] = securedRequest.request
}
Я добавил некоторые функции в запрос на перенос, который должен делать то же самое https://github.com/mohiva/play-silhouette-seed/pull/118 Silhouette- seed/ pull/ 118