[英]Play 2.6 Silhouette compose SecuredAction
I am trying to do something really similar to this .我正在尝试做一些与此非常相似的事情。 ContextRequest
and ContextAction
. ContextRequest
和ContextAction
。 I have a securedRequest
from Silhouette
and I want to compose an Action
reading a cookie
I set up.我有一个来自Silhouette
的securedRequest
,我想securedRequest
一个Action
读取我设置的cookie
。
the difference is that I extended the User
from Silhouette Identity
不同的是我从Silhouette Identity
扩展了User
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
}
I am not able to get the User
because我无法获得User
因为
(Note that com.mohiva.play.silhouette.api.Identity does not match models.User: class User in package entities is a subclass of trait Identity in package api, but method parameter types must match exactly.) (注意com.mohiva.play.silhouette.api.Identity不匹配models.User:包实体中的类User是包api中trait Identity的子类,但方法参数类型必须完全匹配。)
I know that probably I am missing a wrapper.我知道我可能缺少一个包装器。
Try giving a context bound to your Env
, like this:尝试将上下文绑定到您的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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.