2017-03-11 5 views
0

UserAwareAction과 Cache를 결합하려고합니다. CacheBeforeSilhouette을 얻을 수 있지만 다른 방법은 사용할 수 없습니까? 아무도 나에게이 작업을 수행하는 방법에 대한 힌트를 줄 수 있습니까?Silhouette-4.0.X UserAwareAction과 캐시 동작을 결합하는 방법은 무엇입니까?

문제는 play.api.cache.Cached.applyfunction가 CachedBuilderwhich가 매개 변수로 EssentialAction을 필요로 반환 처음이다 :

@Singleton 
class MessageController @Inject() (
    implicit val env: Environment[DefaultEnv], 
    silhouette: Silhouette[DefaultEnv], 
    cache: CacheApi, 
    cached: play.api.cache.Cached) 
    extends Controller with I18nSupport { 

... 

    def testOnlySilhouette = silhouette.UserAwareAction { request => 
    Ok("hi") 
    } 
    def testOnlyCache = cached("homePage") { 
    Action { 
     Ok("Hello world") 
    } 
    } 
    def testCacheOfSilhouette = cached("homePage") { 
    silhouette.UserAwareAction { request => 
     Ok("hi") 
    } 
    } 
    def testSilhouetteOfCache = 
    silhouette.UserAwareAction { request => 
     cached("homePage") { 
     val res:Result = Ok("hi") 
     res //type mismatch; found : play.api.mvc.Result required: play.api.mvc.EssentialAction 
     } 
    } 

답변

0

기독교 KAPS의 @akkie는 gitter에 대답했다. 따라서 항상 다음을 작성해야합니다.

Cached("some-key") { 
    Action { 
    Ok("") 
    } 
} 

두 번째 문제는 요청 유형이 호환되지 않는다는 것입니다. Play 클래스는 Request [B]가 필요하지만 Silhouette은 SecuredRequest [E, B]를 생성합니다. 비트 수작업으로 당신이 일을 얻을 수 있습니다 :

def testSilhouetteOfCache = 
    silhouette.SecuredAction.async { securedRequest => 
    cached("some-key") { 
     Action { 
     Ok("") 
     } 
    }.apply(securedRequest.request).run() 
    } 

당신이 암시 발에 materializer 필요합니다 Materializer는

을 주입